3

おそらく奇妙な質問ですが、ご容赦ください (-: Perl が 'use' を使用してモジュールをロードするとき、これはコンパイル時のディレクティブであり、このモジュールがこのモジュールのどこにも 'require' を使用していないと仮定すると、スクリプトを起動できますか?どちらがそのモジュールを「使用」し、スクリプトが台無しになっている間にモジュールを HDD から消去し、モジュールがすべてメモリにロードされていることを確認しますか? (すべてのメソッドなどを呼び出すことができます...)

ありがとう、

4

2 に答える 2

2

はい、できます。Perl は実行前にソースを内部データ構造 (解析ツリー) にコンパイルしますが、実行時に .pm ファイルでは機能しません。したがって、スクリプトがコンパイルされて正常に起動された後は、ディスクからモジュールを削除しても安全です。

于 2012-05-23T08:08:06.593 に答える
1

これは、開始時に完全にロードされる単純なモジュールで機能します。ただし、多くのモジュールは、AUTOLOAD特定の機能が実際に必要になるまで重い部分のロードを延期する機能を使用していることに注意してください。これらのモジュールは、必要なソースをほとんどどこからでも取得できます - 関数ファイル、独自の__DATA__セクションなどで事前に分割されています。当然、既に削除したファイルをロードしようとすると失敗します。ただし、自分自身へのアクセス__DATA__は引き続き機能します (ただし、メモリにロードされているためか、perl がスクリプトへの開いたハンドルを保持しているためか、終了するまで完全に消えるのを防いでいるためかはわかりません)。

于 2012-05-23T09:48:47.583 に答える