Perlのクロージャ

かなり気軽に使える。
↓こんな感じ。

# クロージャを返す関数
sub function {
    my $scalar = shift;
    my $closure = sub {
        my $scalar_c = $_[0] + $scalar;
        return $scalar_c; 
    };
    return $closure;
}

# クロージャの初期化
$closure1 = function(100);
$closure2 = function(200);

# クロージャの呼び出し
$result1 = $closure1->(10);
$result2 = $closure2->(10);

print "$result1\n";   #=> 110
print "$result2\n";   #=> 210

初期化した時、functionの中で設定した値(レキシカル変数:$scalar)がずっと保持される。
$closureが一つのオブジェクトのように使える。
このような機能は、関数型言語では、高階関数と呼ばれ、ごく一般的に使われている。
Javaの場合は,このようなシンプルな記述はできないが、無名インナークラスで同様のことはできる。
ただし、さらに他の制約があった気がするが、忘れた。
↓参考(というよりほぼぱくり?)
http://kabocha.org/jelfe/07/21.html