我有一個Perl腳本(獨立程序),其中包含一些我希望在其他腳本中重複使用的子腳本。由於執行環境的限制,我無法將這些功能移到常見的.pm
文件中。可作爲程序和模塊使用的Perl腳本
是否有可能區分該腳本是作爲獨立程序運行還是由另一個腳本編輯了require
ed/do
?
我唯一能找到的是在頂層使用caller
:獨立程序沒有任何調用者,而當require
ed caller
顯示誰加載了模塊。有沒有更好的解決方案?
我有一個Perl腳本(獨立程序),其中包含一些我希望在其他腳本中重複使用的子腳本。由於執行環境的限制,我無法將這些功能移到常見的.pm
文件中。可作爲程序和模塊使用的Perl腳本
是否有可能區分該腳本是作爲獨立程序運行還是由另一個腳本編輯了require
ed/do
?
我唯一能找到的是在頂層使用caller
:獨立程序沒有任何調用者,而當require
ed caller
顯示誰加載了模塊。有沒有更好的解決方案?
是的,您的caller
方法是正確的 - 這是一項名爲「modulinos」的技術brian d foy。我猜布萊恩發明了它,除非有人啓發我相反。
modulino的主要工作部分看起來像這樣(從這樣,請回答下面的鏈接):
__PACKAGE__->run(@ARGV) unless caller;
sub run {
my($class, @args) = @_;
}
1;
這裏有幾個引用:
"Modules as Programs" chapter from "Mastering Perl" book by brian d foy
"Scripts as Modules" article in Dr. Dobbs
"How a script becomes a module" article on perlmonks
What should I put in my starter template for my Perl programs?
我在下面發佈了答案,但是如果您能詳細說明「執行環境的限制」,可能有解決方案可以讓您使用適當的模塊? Thx – DVK 2010-08-03 11:02:35
@DVK:我很滿意你的回答。 (我的呼叫者()檢查語法和你的回覆一樣好。)關於限制。真的很愚蠢:我無法添加另一個不可執行的模塊到目錄,因爲它掃描了文件並且所有文件名都有特殊含義。添加.pm會破壞我不允許修改的其他腳本。 – Dummy00001 2010-08-03 11:29:44
根據@FM,我的問題本質上是一個副本http://stackoverflow.com/questions/1131304/ – Dummy00001 2010-08-03 14:05:25