in reply to Re: Initialization of "local static" (style question)
in thread Initialization of "local static" (style question)

The critical thing to remember about the closure trick in 5.8 (I'm not familiar with 5.10) is that  my variables are not initialized until runtime. This is touched on in About "state" variables in Perl 5.10. Making the closure blocks  BEGIN or  INIT blocks in 5.8 controls this, but you still must consider block ordering. See perlmod.

Examples run under 5.8.2.

>perl -wMstrict -le "print F(); { my $y = X(); sub F { return $y } } { my $x = 'foo'; sub X { return $x } } " Use of uninitialized value in print at -e line 1. >perl -wMstrict -le "print F(); BEGIN { my $y = X(); sub F { return $y } } BEGIN { my $x = 'foo'; sub X { return $x } } " Undefined subroutine &main::X called at -e line 1. BEGIN failed--compilation aborted at -e line 1. >perl -wMstrict -le "print F(); BEGIN { my $x = 'foo'; sub X { return $x } } BEGIN { my $y = X(); sub F { return $y } } " foo >perl -wMstrict -le "print F(); INIT { my $y = X(); sub F { return $y } } INIT { my $x = 'foo'; sub X { return $x } } " Use of uninitialized value in print at -e line 1. >perl -wMstrict -le "print F(); INIT { my $x = 'foo'; sub X { return $x } } INIT { my $y = X(); sub F { return $y } } " foo
massa's function generator approach of Re^3: Initialization of "local static" (style question) gets around some of this.