- An anonymous subroutine that grabs lexical variables from its containing environment is a closure. Remember that it does not just take a snapshot of the value at the instant the anonymous subroutine is seen.
# declare an anonymous subroutine, and return a reference to it. my $foo = 10; $rs = sub {
print "Foo is $foo\n"; # Grabs $foo };
&$rs(); # Call the closure through the reference
- The closure keeps the grabbed variable's value around even when the variable goes out of scope.
sub init_counter {
my $num = shift; # lexical variable to be grabbed $rs = sub {
print $num++," ";
};
return $rs;
}
$rs_counter = init_counter(10); # $rs_counter is a ref-to-sub for (1..5) {&$rs_counter()};
# Prints 10 through 14