use strict; use warnings; use Data::Dumper; my $rxFlds = qr {(?x) " ([^"]*) " ([^,]*) (?:,|\z) }; my $resp = q{"F059"3,"Invalid blech"99,"","This, that"33,""77,}; my @flds; while ( $resp =~ m{$rxFlds}g ) { push @flds, [$1, $2]; } print Data::Dumper->Dumpxs([\@flds], [qw{*flds}]) #### @flds = ( [ 'F059', '3' ], [ 'Invalid blech', '99' ], [ '', '' ], [ 'This, that', '33' ], [ '', '77' ] );