在另一个脚本中重新使用perl脚本中的子脚本

在另一个脚本中重新使用perl脚本中的子脚本,perl,Perl,我有两个perl脚本。两者都没有“package”关键字或任何东西。一个脚本有一个子脚本(还有一些自由浮动代码),我想在另一个脚本中使用它,而不需要在这个过程中运行自由浮动代码 A.pl sub my_sub { # do something } # do something else my_sub(); # do something else 这是否可能,而不必在单独的.pm文件中分离子文件,然后加载它?require将运行代码。因此,您需要A.pl来识别在命令行上被加载和被调用

我有两个perl脚本。两者都没有“package”关键字或任何东西。一个脚本有一个子脚本(还有一些自由浮动代码),我想在另一个脚本中使用它,而不需要在这个过程中运行自由浮动代码

A.pl
sub my_sub {
    # do something
}

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


这是否可能,而不必在单独的.pm文件中分离子文件,然后加载它?

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


相反,我强烈建议扭转一切。不要使用庞大的pl脚本,也不要使用pm模块,相反,要使用较小的pl文件,其唯一功能是加载模块并调用封装功能的函数。然后,添加新的模块来保存共享的表单或功能就很简单了。

有些关联:divide et impera…我完全同意。但我从某处继承了这段代码。我通常用Python编写代码(它有一个漂亮的主属性,可以识别模块是被导入还是独立运行)。我想perl中也会有类似的东西。@shikhanshu有:
调用者
。请看我在您的问题下链接的问题。但是Tanktalus是对的:你应该把代码模块化。@shikhanshu它被称为“重构”,从中长期来看,它将大大简化你的生活。而且常常在短期内简化了我的生活。
B.pl
require A.pl; # but load only the subs, don't run anything
my_sub();