有没有理由在Shel包中加入shebang系列?

时间:2012-09-24 12:44:55

标签: perl module

我意识到我应该只将shebang行包含在我们想要直接在shell中运行的脚本中。我也没有在本地安装的任何大模块包中看到shebang行。

然而,如果人们可能因为我还没有意识到的其他原因而将其包括在内,我仍然很好奇。或者,如果可能存在类似(例如)〜'历史'的原因来包含它。或者,因为害怕我的房子爆炸,所以shebang线是否永远不会被包含在.pm文件(期间)中?

2 个答案:

答案 0 :(得分:7)

没有。 shebang将文件标记为可执行文件,模块通常不可执行。

一般来说,也有例外。 Python有一个习惯用来检测当前文件是否是解释器调用的文件,而且很多模块在独立调用时使用它来运行单元测试。这在Perl社区中并不常见,在社区中,您有额外的单元测试文件与CPAN上的模块捆绑在一起。

所以即使考虑到这个可能的例外情况,我也不认为在模块文件中包含一个shebang并不是直接执行的好方式。

答案 1 :(得分:4)

简短的回答是否定的,但没有正确或错误的答案。

shebang的目的是让操作系统知道口译员的位置。无需将其添加到任何Perl文件(脚本或模块)。在Windows下,无论如何都会被忽略**。

更具体地说,在大多数情况下,没有理由将它添加到模块中,除非有一些原因要您直接执行该模块。无论如何,Perl模块实际上只是一个Perl脚本,顶部有一个'package'命令。

无论哪种方式,它都不会受到影响,但在大多数情况下它没有意义。

**无论Perl是如何启动的,它总是会看到命令行开关的shebang。这甚至适用于Windows,其中操作系统不会查找shebang行,但是当Perl扫描文件时它会。请参阅http://perldoc.perl.org/perlrun.html