sub trace {
my($package, $filename, $line) = caller;
# ...
}
####
package TraceMacro;
use Filter::Simple;
FILTER_ONLY
code => sub {
s/TRACE\(\s*([^)]+)\s*\)/__PACKAGE__."::_trace(q($1),$1)"/eg; };
# replace each TRACE(...) with ::_trace(q(...),...)
sub _trace {
my($names,@values) = @_;
my @names = split /\s*,\s*/, $names; # extract varnames
my($package,$file,$line) = caller;
foreach my $i(0..$#names) {
print STDERR "$file ($line): $names[$i]:'$values[$i]'";
}
}
##
##
use TraceMacro;
# ...
TRACE( $foo, $bar );