在另一个脚本中重复使用 Perl 脚本中的子程序

3

我有两个Perl脚本,都没有"package"关键字或其他东西。其中一个有一个子程序(以及一些自由浮动的代码),我想在另一个脚本中使用它,而不运行该过程中的自由浮动代码。

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文件并加载它的情况下实现?

3
分而治之。 - clt60
1个回答

11

require将运行代码。因此,您需要A.pl来识别被加载和在命令行上调用之间的区别。我认为这可以做到,但您有点忽略了重点。

相反,我强烈建议反转一切。不要使用巨大的pl脚本和没有pm模块,而是将其反转,并使用仅负责加载模块并调用封装功能的小型pl文件。然后,轻松添加新模块以包含共享表单或功能。


我完全同意。但是我要从某个地方继承这段代码。我通常使用Python编码(它有一个巧妙的__main__属性来识别模块是被导入还是独立运行)。我认为Perl也应该有类似的东西。 - shikhanshu
2
@shikhanshu 有一个叫做 caller 的东西。请看我在你问题下面链接的那个问题。但是Tanktalus是正确的:你应该努力将你的代码模块化。 - ThisSuitIsBlackNot
1
@shikhanshu 这被称为“重构”,它将在中长期内极大地简化你的生活。而且通常在短期内也能简化我的生活。 - Tanktalus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接