- ベストアンサー
モジュールの概念・リファレンスとオブジェクト
- モジュールの概念・リファレンスとオブジェクトについて
- モジュールの概念・リファレンスとオブジェクトの関係について
- モジュールの概念・リファレンスとオブジェクトの内部処理について
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>『パッケージの関数のポインタ+リファレンスがメモリに確保される。』 そんな感じです。 ただ、perlは割と無茶なことができるので、こんなコードでも動きます。 (ただし、use strictではエラー) #packageとmethodの宣言 {package TEST;sub method {print "call method\n"}} #package名を文字列で与える my $pkg = 'TEST'; #package名をhash refとして使用 $pkg->{'key'} = "hash ref\n"; #hash ref\nを出力 print $pkg->{'key'}; #&TEST::method ('TEST')を呼ぶ(call method\nを出力) $pkg->method; blessはこれをuse strict環境でも動くようにしたものといえるかもしれません。 (use strictを使わないなら上の方法で同じことができるし) ちなみにblessはreferならhashだけでなくarryも使用できます。 (あまり使わないと思うけど) use strict; { package TEST; sub new { bless []; } sub method {print "aaa\n"} } my $my = TEST->new (); $my->method; @{$my} = (3,4); use Data::Dumper; print Dumper $my;
その他の回答 (1)
- zebedeer
- ベストアンサー率66% (80/121)
こんなコードを流すと理解の助けになるかもしれません。 (あとはblessが理解できればすっきりすると思う) { package TEST; sub new { bless {}; } sub method {} } use Data::Dumper; print Dumper \%{TEST::};
お礼
時間がかかってすみません。 いろいろ自分自身で検証をしたりしていました。 簡単に言って、blessされると、『パッケージの関数のポインタ+リファレンスがメモリに確保される。』ってな感じなんですね。 (まあ、オブジェクトの実装としては当たり前ですが。) で、コンテキストによって挙動を変えている、という感じで理解しました。 もし、理解が間違っている時は指摘してください。