6

気になります。Perlの暗黙的に呼び出されるサブルーチンのほとんどは、すべて大文字で名前を付ける必要があります。TIESCALAR、DESTROYなど。実際にperldoc perltoot

コンストラクターに任意の名前を付けることができる場合は、デストラクタを使用しないのはなぜですか?コンストラクタは明示的に呼び出されますが、デストラクタは呼び出されないためです。破壊は、Perlのガベージコレクション(GC)システムを介して自動的に行われます。これは、高速ですが、やや怠惰な参照ベースのGCシステムです。何を呼ぶべきかを知るために、PerlはデストラクタにDESTROYという名前を付けるように主張しています。現在、デストラクタを呼び出す適切なタイミングに関するPerlの概念は明確に定義されていません。そのため、デストラクタが呼び出されるときに依存するべきではありません。

DESTROYがすべて大文字になっているのはなぜですか?Perlは、関数が何らかの方法でPerlによって自動的に呼び出されることを示すための規則として、純粋に大文字の関数名を使用する場合があります。暗黙的に呼び出されるその他のオブジェクトには、BEGIN、END、AUTOLOADに加えて、perltieで説明されているタイオブジェクトによって使用されるすべてのメソッドが含まれます。

では、なぜimportサブルーチンは小文字のままになっているのでしょうか。誰かがこれについて良い洞察を持っていますか?

4

3 に答える 3

6

import" " は暗黙的に呼び出されていないと思います。の実装によって発行される明示的な呼び出しですuseperldocから引用するには:

これは、次とまったく同じです。

BEGIN { require Module; Module->import( LIST ); }

于 2011-02-19T16:44:00.597 に答える
3

importDVK の回答を少し拡張すると、たとえば、オプションのモジュールをロードしたり、名前空間を自動入力する場合など、正当に明示的に呼び出したい場合があります。

eval "require $modulename; $modulename->import( LIST ); ";

DESTROY や TIESCALAR などを明示的に呼び出したいと思うような状況は考えられません。

于 2011-02-19T22:11:07.963 に答える
1

ただの設計ミスです。変更するには遅すぎます。

于 2011-02-20T10:17:07.420 に答える