2008年05月01日 20:30 [Edit]

この記事をクリップ! newsing it! Buzzurlにブックマーク b.hatena.ne.jp/entry perl - で(Recall()|arguments.callee()|&?BLOCK())

test run via codepad
sub recallable_sub(&) {
    use B::Deparse;
    my $coderef = shift;
    my $src     = B::Deparse->new->coderef2text($coderef);
    $src =~ s{\bRecall\s*\(}{\$coderef->\(}g;
    $coderef = eval qq"sub $src";
    die $@ if $@;
    $coderef;
}
local $\ = "\n";
print recallable_sub {
    $_[0] <= 1 ? 1 : $_[0] * Recall( $_[0] - 1 );
}
->($_) for (1..9);

ね、簡単でしょ?

Dan the Perl Monger

See Also

この記事へのトラックバックURL

この記事へのソーシャルブックマーク
はてなブックマーク
Livedoorクリップ
0 Buzzurl
この記事へのトラックバック
Perl Coreだけで同様のことを実装できないかと考えたらあっさり出来たので。 Perl で JS の arguments.callee 的なことしようと思ってハマった - IT戦記 それDevel::Caller でできるよ - TokuLog 改め だまってコードを書けよハゲ sub recallable_sub(&#38;) { use B::Depar
[perl]PerlでRecallの話【Unknown::Programming】at 2008年05月03日 20:12
これまでのあらすじから。 Perl で JS の arguments.callee 的なことしようと思ってハマった - IT戦記 それDevel::Caller でできるよ - TokuLog 改め だまってコードを書けよハゲ 404 Blog Not Found:perl - で(Recall()|arguments.callee()|&?BLOCK()) PerlでRe...
perl - で無名再帰関数再び【404 Blog Not Found】at 2009年02月15日 10:53