2017-02-15 88 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

相关问题