はじめての 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

再帰呼び出しを使うと非常に綺麗なコードになりますね。

■参考