Comment puis-je analyser CSV en Perl avec une regex?

Je vais avoir quelques problèmes avec l'analyse des données au format CSV, avec des guillemets. Mon principal problème avec les citations à l'intérieur d'un champ. Dans l'exemple suivant les lignes 1 - 4 fonctionne correctement, mais 5, 6 et 7 ne sont pas.

COLLOQ_TYPE,COLLOQ_NAME,COLLOQ_CODE,XDATA
S,"BELT,FAN",003541547,
S,"BELT V,FAN",000324244,
S,SHROUD SPRING SCREW,000868265,
S,"D" REL VALVE ASSY,000771881,
S,"YBELT,"V"",000323030,
S,"YBELT,'V'",000322933,

Je voudrais éviter Text::CSV comme il n'est pas installé sur le serveur cible. Réalisant que les CSV sont plus complexes qu'ils ne le regarde, je suis en utilisant une recette de Perl livre de cuisine.

sub parse_csv {
  my $text = shift; #record containg CSVs
  my @columns = ();
  push(@columns ,$+) while $text =~ m{
    # The first part groups the phrase inside quotes
    "([^\"\\]*(?:\\.[^\"\\]*)*)",?
      | ([^,]+),?
      | ,
    }gx;
  push(@columns ,undef) if substr($text, -1,1) eq ',';
  return @columns ; # list of vars that was comma separated.
}

Quelqu'un aurait-il une suggestion pour l'amélioration de la regex pour gérer les cas ci-dessus?

source d'informationauteur Mark Nold | 2009-03-11