You might want to use Deparse to show you the reduced syntax, this will produce slightly prettier output, which might help you a little.
# bad perl
print $foo; s/dog/cat/gm; m%foo%;
FOO: for ($foo) { /dog/ && do {last FOO}; /cat/ && do {$dog = 'rabbit'
+};}
exit(0) or die "wooot?";
When run through Deparse:
bash-2.03$ perl -MO=Deparse badperl.pl
badperl.pl syntax OK
print $foo;
s/dog/cat/gm;
/foo/;
FOO: foreach $_ ($foo) {
if (/dog/) {
last FOO;
}
if (/cat/) {
$dog = 'rabbit';
}
}
die 'wooot?' unless exit 0;
As you can see, some bits get clearer, while others get a little more murky, but it's a useful tool.