はじめての coderepos で arguments::callee 初体験
Devel::Caller が便利すぎる件について - IT戦記
Devel::Caller と PadWalker モジュールをわざわざインストールするのは面倒という方に arguments.xs を作りました。
以下のコマンドでarguments.xsをインストールできます。coderepos++
svn co http://svn.coderepos.org/share/lang/perl/arguments cd arguments cd trunk perl Makefile.PL make make test make install
使い方はこんな感じで JavaScript っぽい arguments.callee を使った再帰呼出が Perl でも綺麗に書けるようになります。
NAME arguments.xs - Perl extension for arguments::callee SYNOPSIS use arguments; sub { my $c = shift; print "$c\n"; arguments::callee->($c) if ($c--); }->(10); DESCRIPTION inspired by arguments.callee from ECMAScript. see also. http://d.hatena.ne.jp/amachang/20080501/1209623634 SEE ALSO Devel::Caller, PadWalker LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
どう見てもネタですね。本当にありがとうございました。
ソースはほとんど Devel::Caller と PadWalker からのコピペなのですが、
ファイルサイズがとても小さいのでXS初心者の方にも安心してご覧いただけるものだと思います。
http://coderepos.org/share/browser/lang/perl/arguments/trunk
CodeReposにコミットしましたので、興味のある方はいろいろ弄ってあげてください。><
■階乗の計算(サンプルコード)
use arguments; print sub { my $x = shift; return 1 if ($x <= 1); return $x * arguments::callee->($x - 1); }->(5);
実行結果
120
再帰呼び出しを使うと非常に綺麗なコードになりますね。
■参考