perlで関数型言語(風)の処理 – 変数に関数を代入して実行。

perlで関数型言語(風)の処理 – 変数に関数を代入して実行。

JavaScriptとかで書いてて便利な無名関数。
perlでも出来たら何か便利かなぁ。

my $sub = sub {print @_, "\n";};
&$sub('Hello,world!');

#実行結果
Hello,world!

関数型言語って何がすごいんですか - Gemmaの日記
にあるJavaScriptの例をperlで書いてみる。

sub rocket{
    my $n = shift;
    return sub {
        if ($n){
            print $n,"\n";
            $n--;
        } else{ print "liftoff\n"; }
    }
}

my $f = rocket(3);
my $g = rocket(3);

&$f();
&$f();
&$f();
&$f();
&$g();
&$g();

#実行結果
3
2
1
liftoff
3
2

ちょっと面白い。

リンク先のエントリーのコメント

これは関数型言語というより,クロージャのオブジェクト指向的使い方.

とある。純粋な関数型言語には出来ないらしい。例題としてはちょっとずれてるんじゃないの?との事。

ま、いっか。

2011-02-28追記
関数の実行はモダンな書き方だと以下の感じ?

# 両方同じ意味
&$f();
$f->();