Perl脚本可用作程序和模块

Dum*_*001 5 linux perl

我有一个Perl脚本(独立程序),它包含一些我想在其他脚本中重用的子程序.由于执行环境的限制,我无法将函数移动到公共.pm文件.

是否有可能区分脚本是否运行作为一个独立的程序,或者是require编/ do由另一个脚本编?

我唯一能找到的就是caller在顶层使用:当requireed caller显示谁加载了模块时,独立程序没有任何调用者.有没有更好的解决方案?

DVK*_*DVK 9

是的,你的caller方法是正确的 - 这是一种由brian d foy命名为"modulinos"的技术.我猜是布莱恩发明了它,除非有人启发我.

modulino的主要工作部分看起来像这样(来自下面的SO答案):

__PACKAGE__->run( @ARGV ) unless caller;
sub run {
    my( $class, @args ) = @_;
}
1;
Run Code Online (Sandbox Code Playgroud)

以下是一些参考:

brian d foy的"掌握Perl"一书中的"模块作为程序"一章

Dobbs博士的"Scripts as Modules"一文

关于perlmonks的文章"如何成为一个模块"

我应该在我的Perl程序的入门模板中添加什么?