use Data::Record; use Regexp::Common; # four lines, but there are only three records! (newline in quotes) my $text = <<'END_DATA'; 1,2,"programmer, perl",4,5 1,2,"programmer, perl",4,5 1,2,3,4,5 END_DATA my $data = Data::Record->new({ split => "\n", unless => $RE{quoted}, trim => 1, fields => { split => ",", unless => $RE{quoted}, } }); my @records = $data->records($text); foreach my $fields (@records) { foreach my $field = (@$fields); # do something } }