in reply to BEGIN vs initialization
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).
|
|---|