eval 内でのワーニングの詳細を表示させる( Perl )


「Use of uninitialized value at (eval 20) line 29.」等と eval 内で起こるワーニングの詳細を出力する方法( Perl )。

以下のコードをどこかに追加しておく。何階層か上に行くと、プログラム上の行番号などが表示される。

use Carp;
$SIG{__WARN__} = sub {
my $i = 0;
my @vals = qw(pkg filename line subr hasaargs wantarr evaltext is_req hints bitmask);
my %info;
while(@info{@vals} = caller($i++)){
for my $val (@vals){
warn “[$i] $val: $info{$val}\n”;
}
}
carp shift;
};