#!/usr/bin/perl my $foo = 1; my $bar = $foo - 1; $SIG{__DIE__} = \&report; eval { print + ( $foo / $bar ),"\n"; }; sub report { (my $num) = shift() =~ /at \S+ line (\d+)/; warn "Failure in eval() at line $num:\n"; seek DATA, 0,0; my $c; EVAL: while () { if ($. == $num) { $c += () = /\{/; warn $_; $c -= () = /\}/; last unless $c; while () { $c += () = /\{/; warn $_; $c -= () = /\}/; last EVAL unless $c; } } }; }; __END__ Failure in eval() at line 8: print + ( $foo / $bar ),"\n";