• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AUTOLOADサブルーチンが実行される条件?)

AUTOLOADサブルーチンの実行条件

このQ&Aのポイント
  • Perlのコードを動かしながら勉強していて、AUTOLOADサブルーチンの実行条件について疑問が生じました。
  • 特定のコードを実行すると、AUTOLOADサブルーチンが呼び出されているようですが、その呼び出し元は不明です。
  • AUTOLOADサブルーチンは何時、どこで、どのような条件下で実行されるのか、詳しく教えていただきたいです。

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

  • ベストアンサー
回答No.2

DESTROYを呼ぼうとして、DESTROYが存在しないのでAUTOLOADを呼びました。 オブジェクトが参照されなくなり、オブジェクトが破棄されるときDESTROYが呼ばれます。

zyousuke
質問者

お礼

なるほど! このコードではnewの結果をすぐさま捨てているので、 DESTROYが呼ばれるのはnewを実行した直後ですね。 もし私がnewの後に何かコードを書いていれば、どのタイミングで'0'が表示されるかは調べられましたね^^;

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

ちと調べてみると, our は 5.6.0 で入ったようですね. 5.6.0 のリリースは 2000年の 5月. おお, 前世紀なのか. ちなみに今の最新は 5.14.1.

zyousuke
質問者

お礼

おっと、この本は中古で入手したので、 私のPerlの勉強が10年以上滞っているとは考えないでいただきたい!!! せいぜい6~7年です^^;

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ちなみに sub AUTOLOAD { our $AUTOLOAD; print "$AUTOLOAD\n"; } としておけば「何が足りなかったのか」はわかります.

zyousuke
質問者

お礼

AUTOLOADに実際に呼び出されたサブルーチン名を報告させるのですね; ところで私の本はだいぶ時代遅れになってしまいました。 この本にはPerlの全関数が載っているはずなのですがourは載っていませんでした。 この関数は初めて知りました^^;

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ちょっと調べた.

参考URL:
http://d.hatena.ne.jp/okamuuu/20100429/1272507611
zyousuke
質問者

お礼

なるほど! クラスにはDESTROYというサブルーチンを用意しないといけないのですね。 それが無かったもんだからPerlが仕方なくAUTOLOADを呼んだのですね。

関連するQ&A