use strict; use warnings; use re 'eval'; use Data::Dumper; my @values; my $i; my $j = 0; my $field= q(("[^"]*"|'[^']*'|[^"',][^,\)]*)); my $content = q(A("Stand","Retour",'NO',777,"4","DD/PP",9,20524)); $content .= qq( bla bla \n foo bar A("Stand","Retour",'YES',666,"4","DD/PP",9,20525)); 1 while $content =~ m#A\($field(?{$i=1})(?:,$field(?{$values[$j++]=$2 if ++$i==4}))*\)#g; print Dumper(\@values);