[JavaScript] 猿でもわかるクロージャ超入門という記事が好評だったので、今回はPerl編です。 上記のJavaScript版の記事を読んだという前提で解説させていただきます。 問題 呼び出すたびに、1,2,3,...を返すような関数f( )を定義せよ。 f(); // 1 f(); // 2 f(); // 3 クロージャ その1 JS版のクロージャに似せて書くとこうなります。 #!/usr/bin/perl use strict; use warnings; sub outer { my $i = 1; return sub { print "$i\n"; $i++; }; } my $f = outer(); $f->(); # 1 $f->(); # 2 $f->(); # 3 JS版とそっくりですね~。 関数のリファレンスを使っているので、呼び出し方法が$f->()のよう