Como posso analisar o CSV citado no Perl com um regex?

Estou tendo alguns problemas ao analisar dados CSV com aspas. Meu principal problema é com aspas dentro de um campo. No exemplo a seguir, as linhas 1 a 4 funcionam corretamente, mas 5,6 e 7 nã

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,

Gostaria de evitar o Text :: CSV, pois não está instalado no servidor de destino. Perceber que os CSVs são mais complicados do que parecem, estou usando uma receita do Perl Cookbook.

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.
}

Alguém tem uma sugestão para melhorar a regex para lidar com os casos acima?

questionAnswers(7)

yourAnswerToTheQuestion