Попробуйте это:
#!/usr/bin/env perl
use strict;
use warnings;
use Tie::STDOUT print => sub {
my ( $pkg, $file, $line ) = caller(2);
print "$pkg, $file, $line :: ", @_;
};
print "Hello, World\n";
Что дает:
$ perl tp.pl
main, tp.pl, 10 :: Hello, World
Обновление: я только что выпустил Devel :: Ditto :
$ perl -MDevel::Ditto myprog.pl
[main, t/myprog.pl, 9] This is regular text
[main, t/myprog.pl, 10] This is a warning
[MyPrinter, t/lib/MyPrinter.pm, 7] Hello, World
[MyPrinter, t/lib/MyPrinter.pm, 8] Whappen?