- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AUTOLOADサブルーチンが実行される条件?)
AUTOLOADサブルーチンの実行条件
このQ&Aのポイント
- Perlのコードを動かしながら勉強していて、AUTOLOADサブルーチンの実行条件について疑問が生じました。
- 特定のコードを実行すると、AUTOLOADサブルーチンが呼び出されているようですが、その呼び出し元は不明です。
- AUTOLOADサブルーチンは何時、どこで、どのような条件下で実行されるのか、詳しく教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DESTROYを呼ぼうとして、DESTROYが存在しないのでAUTOLOADを呼びました。 オブジェクトが参照されなくなり、オブジェクトが破棄されるときDESTROYが呼ばれます。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
ちと調べてみると, our は 5.6.0 で入ったようですね. 5.6.0 のリリースは 2000年の 5月. おお, 前世紀なのか. ちなみに今の最新は 5.14.1.
質問者
お礼
おっと、この本は中古で入手したので、 私のPerlの勉強が10年以上滞っているとは考えないでいただきたい!!! せいぜい6~7年です^^;
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.3
ちなみに sub AUTOLOAD { our $AUTOLOAD; print "$AUTOLOAD\n"; } としておけば「何が足りなかったのか」はわかります.
質問者
お礼
AUTOLOADに実際に呼び出されたサブルーチン名を報告させるのですね; ところで私の本はだいぶ時代遅れになってしまいました。 この本にはPerlの全関数が載っているはずなのですがourは載っていませんでした。 この関数は初めて知りました^^;
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
ちょっと調べた.
質問者
お礼
なるほど! クラスにはDESTROYというサブルーチンを用意しないといけないのですね。 それが無かったもんだからPerlが仕方なくAUTOLOADを呼んだのですね。
お礼
なるほど! このコードではnewの結果をすぐさま捨てているので、 DESTROYが呼ばれるのはnewを実行した直後ですね。 もし私がnewの後に何かコードを書いていれば、どのタイミングで'0'が表示されるかは調べられましたね^^;