¿Cómo puedo analizar CSV citado en Perl con una expresión regular?

Tengo algunos problemas al analizar datos CSV con comillas. Mi principal problema es con las comillas dentro de un campo. En el siguiente ejemplo, las líneas 1 - 4 funcionan correctamente pero 5,6 y 7 no.

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,

Me gustaría evitar Text :: CSV ya que no está instalado en el servidor de destino. Al darme cuenta de que los CSV son más complicados de lo que parecen, estoy usando una receta del 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.
}

¿Alguien tiene una sugerencia para mejorar la expresión regular para manejar los casos anteriores?

Respuestas a la pregunta(7)

Su respuesta a la pregunta