Javascriptの勉強をしながら思ったんだけど、Perlのオブジェクトって一般的にハッシュのリファレンスだけど、実際はblessされたリファレンスであれば何でもいいんだよね。実際Jcode.pmとかスカラーのリファレンスだ(と思った)し。
じゃあ関数のリファレンスもオブジェクトになるのか?と思って試してみました。理屈ではなるはずとはいえ、実際試してみるとなかなか面白い。ただこれを使う機会があるかどうかは別ですが・・・
package A; sub new{ my $str = "object A\n"; return bless(\$str, $_[0]); } package B; sub new{ return bless(sub{print "object B\n";}, $_[0]); } package main; my $a = new A(); print $$a; my $b = new B(); $b->();
object A object B
追記
関数のリファレンスってことで、すごいくだらないことを考えてしまいました。
recursive()->()->()->(); sub recursive{ return sub{ return sub{ return sub{ print "recursive\n"; } } } }