Lambda Closure at Perl Design Patterns Wiki

http://perldesignpatterns.com/?lambdaclosure
Perl のレキシカル変数で lazy evaluation
レキシカル変数は関数呼び出しのたび生成され、それを参照するスコープが消滅するまで残る。

do {
my $head = sub {};
sub add_link {
my $link = shift;
my $next = $head;
$head = sub { $next->(@_); $link->(@_) };
}
sub run_links {
$head->(@_);
}
};

add_link sub{print "> @_\n"};
add_link sub{print "< @_\n"};
run_links('hello', 'world');

とやると、

> hello world< hello world

と出る。
引数が格納される配列 @_ はレキシカルじゃないので、
関数ごとに独立している。(内側の関数から、外側の関数の@_は見えない)
(だから引数をまるごと渡して処理を委譲するときに、引数が長すぎると遅い…)

これは関数呼び出しだけを lazy に評価しているけれど、
tie を活用すれば変数参照も lazy にできるような気が。