in reply to (Debugging, Tracing, Trace, Instrumenting) Automatic tracing of my Perl code?

Ok, try this. It's not guaranteed to work, but it should be better than trying to brave the multi-line problem from above.
package LineDebug; $LOADED = 0; $insert = qq<print "\\tDEBUG: " . __LINE__ . "\\n";\n>; sub import { return if $LOADED++; my $freq = (@_ == 3 && pop) || 1; my ($file) = (caller)[1]; my $code; open PROG, $file; while (<PROG>) { $code .= $_; if ($freq == 1) { next unless /\S/; $code =~ s/;\s*\n\z/; $insert/; } elsif ($. % $freq == 0) { if (!/\S/) { $code =~ s/\n\z/; $insert/ } else { $code =~ s/:;\s*\n\z/; $insert/ } } } close PROG; # print $code; eval $code; exit; } 1;
It's used like so:
use LineDebug; # code...
or
use LineDebug freq => 10; # code...
It will print the line number of the file on every line ending with a semicolon (THIS IS NOT 100% ACCURATE). Specifically, it will not do this on blank lines. If you give it a frequency argument, it will print every X lines, if that line ends in a semicolon or is blank.

$_="goto+F.print+chop;\n=yhpaj";F1:eval