2017-02-15 87 views
3

我有兩個perl腳本。兩者都沒有「包裝」關鍵字或任何東西。一個人有一個我想在另一個腳本中使用的子(另外還有一些自由浮動代碼),而無需在進程中運行自由浮動代碼。在另一個腳本中重新使用perl腳本中的子文件

A.pl 
sub my_sub { 
    # do something 
} 

# do something else 
my_sub(); 
# do something else 

B.pl 
require A.pl; # but load only the subs, don't run anything 
my_sub(); 

這是可能的,而不必在一個單獨的.pm文件分離出子,然後加載它?

+0

有點相關:[是否可以使用或需要一個Perl腳本而不執行它的語句?](http://stackoverflow.com/q/232475) – ThisSuitIsBlackNot

+3

分而治之...... – jm666

回答

11

require將運行代碼。所以你需要A.pl來識別被加載和在命令行中被調用的區別。我認爲這是可以做到的,但你有點錯過了這一點。

相反,我強烈建議顛倒一切。不要使用龐大的pl腳本,也不要使用pm模塊,反之,並且使用小型pl文件,其唯一功能是加載模塊並調用封裝其功能的函數。然後添加新模塊來保存共享表單或功能是微不足道的。

+0

我完全同意。但是我從某處繼承了這些代碼。我通常使用Python編寫代碼(它有一個漂亮的__main__屬性來識別模塊是否被導入或正在獨立運行)。以爲在perl中會有這樣的東西。 – shikhanshu

+2

@shikhanshu有:'caller'。看到我在你的問題下鏈接的問題。但是Tanktalus是對的:你應該努力模塊化你的代碼。 – ThisSuitIsBlackNot

+1

@shikhanshu它被稱爲「重構」,將大大簡化您的中長期生活。而且通常在短期內也簡化了我的生活。 – Tanktalus

相關問題