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}])