Perl脚本可用作程序和模块

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

是否可以区分脚本是作为独立程序运行还是由另一个脚本编辑/ do

我唯一能find的就是在顶层使用caller :独立程序没有任何调用者,而当require caller显示谁加载模块。 有没有更好的解决scheme?

是的,你的caller方式是正确的 – 这是一个由布莱恩福伊命名为“modulinos”的技术。 我猜布莱恩发明了它,除非有人启发我相反。

modulino的主要工作部分是这样的(从下面链接的SO答案):

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

这里有几个参考文献:

brian d foy的“Mastering Perl”一书中的“modulees as Programs”一章

Dobbs博士的“作为模块的脚本”文章

perlmonks上的“脚本如何成为模块”一文

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