Variables are initialised when the respective code executes, and BEGIN blocks execute as early as possible, i.e. as soon as they are defined. (And use implies BEGIN.)
#!/usr/bin/perl use strict; use warnings; BEGIN { print "3: foo=$::foo\n"; our $foo = 42; print "4: foo=$foo\n"; BEGIN { print "1: foo=$foo\n"; $foo = 43; print "2: foo=$foo\n"; } print "5: foo=$foo\n"; $foo = 44; } BEGIN { print "6: foo=$::foo\n"; } __END__ Use of uninitialized value in concatenation (.) or string at ./809940. +pl line 11. 1: foo= 2: foo=43 3: foo=43 4: foo=42 5: foo=42 6: foo=44
Note that although our $foo = 42; has already been "seen" during compilation, the variable is still undefined in the nested BEGIN block (which runs before the outer one).
In reply to Re: BEGIN vs initialization
by almut
in thread BEGIN vs initialization
by Wiggins
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |