> > sub variables { > my $name = shift; > return sub { > my $my = 1; > state $state = 1; > permanent $permanent = 1; > say "$name: my is $my. state is $state. permanent is > $permanent"; > $_++ for $my, $state, $permanent; > } > } > Lest we forget, "state" got introduced because "my $x if 0;" was turned into a syntax error or something. Here's how to produce the requested output using Perl 5.0: { # scope to hold $permanent my $permanent = 1; # gets declared at parse-time, # but remains undef until execution reaches this line # or the first time the result of variables is invoked sub variables { # closes over $permanent my $name = shift; my $state = 1; sub { # closes over $name and $state my $my = 1; # goes away after getting incremented print "$name: my is $my. state is $state. permanent is $permanent\n"; $_++ for $my, $state, $permanent; } } } -- "Lay off that whiskey, and let that cocaine be!" -- Johnny CashThread Previous | Thread Next