Actually I get different results. On 5.6.1 (win32) lexicals declared after INIT are not visible from INIT.
My results on 5.8 match yours if I run your code. Not surprising since your code is different from mine :-)
dump_lex climbs up the callstack to the enclosing file lexical scope. So it would be the same sort of thing as doing this:
use warnings;
use strict;
INIT {
use Data::Dumper;
use PadWalker qw (peek_my peek_sub);
print Dumper(peek_my(1));
}
my $foo = 'lee';
my $bar = "Bar";
print Dumper(peek_my(0));
{ my @foo = (1..3) };
{ my @bar = (9..12) };
print Dumper(peek_my(0));
Which gives (on 5.8)
$VAR1 = {
'$foo' => \undef,
'@bar' => [],
'@foo' => [],
'$bar' => \undef
};
$VAR1 = {
'$foo' => \'lee',
'$bar' => \'Bar'
};
$VAR1 = {
'$foo' => \'lee',
'$bar' => \'Bar'
};
Again, INIT can see everything, but nothing can be seen before/after the blocks are executed at the top level. I still don't understand what's happening here :-)
|