in reply to Is it possible to determine the eval block accumulator?
Expanding on what Juerd suggested a little, consider that you can do this sort of thing:
produces:use strict; my $line = 1; my $sub = 'foo'; eval "#line $line $sub\ndie"; print "1: $@"; $line = 2; $sub = 'bar'; eval "#line $line $sub\ndie"; print "2: $@";
1: Died at foo line 1. 2: Died at bar line 2.
Also consider the fact that even though you're building blocks of code, those blocks must eventually get parsed as eval EXPR type eval's unless I'm not understanding something. The only time I see those eval(xxx) messages is when I use expressions. When I use blocks I get the file name and line number the block is in. I believe that's because eval blocks are compiled at compile time where file names and line numbers are set. Expressions are compiled at run time and have no file name/line number context unless given, as in Juerd's examples that I expanded on. My reasoning may be incorrect, but testing shows the difference. This code in a file named evalt
produces:use strict; eval { die; }; print "1: $@"; eval "die"; print "2: $@";
1: Died at evalt line 7. 2: Died at (eval 1) line 1.
|
|---|