• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:モジュールの概念・リファレンスとオブジェクト)

モジュールの概念・リファレンスとオブジェクト

このQ&Aのポイント
  • モジュールの概念・リファレンスとオブジェクトについて
  • モジュールの概念・リファレンスとオブジェクトの関係について
  • モジュールの概念・リファレンスとオブジェクトの内部処理について

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.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)
回答No.1

こんなコードを流すと理解の助けになるかもしれません。 (あとはblessが理解できればすっきりすると思う) { package TEST; sub new { bless {}; } sub method {} } use Data::Dumper; print Dumper \%{TEST::};

tamanegi_majin
質問者

お礼

時間がかかってすみません。 いろいろ自分自身で検証をしたりしていました。 簡単に言って、blessされると、『パッケージの関数のポインタ+リファレンスがメモリに確保される。』ってな感じなんですね。 (まあ、オブジェクトの実装としては当たり前ですが。) で、コンテキストによって挙動を変えている、という感じで理解しました。 もし、理解が間違っている時は指摘してください。

関連するQ&A

専門家に質問してみよう