クロージャ

クロージャは内部状態を保持するコードブロックである。かつ、クロージャのある環境と結びつくことができる。

サンプル


sub make_counter {
my $k = shift;
sub {
$k += shift;
};
}
my $x = make_counter 10;
my $y = make_counter 5;

my ( $a, $b ) = ( 4, 6 );

print "x + $a = ", $x->($a), "\n";
print "y + $a = ", $y->($a), "\n";
print "x + $b = ", $x->($b), "\n";
print "y + $b = ", $y->($b), "\n";

実行結果

x + 4 = 14
y + 4 = 9
x + 6 = 20
y + 6 = 15

関連:Martin Fowler's Bliki in Japanese - Closure