Perlのオブジェクト

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";
            }
        }
    }
}