可能是一個奇怪的問題,但忍受我( - : 當Perl加載模塊使用'使用',這是一個編譯時指令,並假設這個模塊不使用'要求'在這個模塊的任何地方,我可以啓動一個'使用'該模塊的腳本,並且腳本廢棄時從硬盤擦除模塊並確保模塊全部加載到內存中(可以調用其所有方法等。 ..)Perl和編譯時模塊加載
感謝,
可能是一個奇怪的問題,但忍受我( - : 當Perl加載模塊使用'使用',這是一個編譯時指令,並假設這個模塊不使用'要求'在這個模塊的任何地方,我可以啓動一個'使用'該模塊的腳本,並且腳本廢棄時從硬盤擦除模塊並確保模塊全部加載到內存中(可以調用其所有方法等。 ..)Perl和編譯時模塊加載
感謝,
是的,可以。Perl的運行它之前編譯來源爲內部數據結構(parse tree),並且它不會在運行時.pm的文件。因此,移除磁盤模塊是安全的這個腳本已經編譯併成功發佈。
這將適用於啓動時完全加載的簡單模塊。但請注意,許多模塊使用AUTOLOAD
功能推遲加載其重型部件,直到真正需要某些特定功能。這些模塊然後可以從幾乎任何地方抽取所需的源 - 由功能文件預先分割,自己的__DATA__
部分等等。自然地嘗試加載已經被刪除的文件將失敗。然而,訪問自己的__DATA__
仍然可以工作(儘管我不能肯定地說它是因爲它被加載到內存中還是因爲perl持有腳本的打開句柄,從而阻止它在完成之前完全消失)。
你能舉出反映你的問題的例子嗎? – tuxuday
這可能適用於簡單的模塊,但更復雜的可以根據需要加載子模塊或從__DATA__文件句柄中讀取(儘管Linux/Unix在打開和Windows,IIRC時不會真正刪除該文件,刪除開放文件是不允許的)。 – salva