7

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

但是,我仍然很好奇人们是否会出于我尚未意识到的其他原因将其包含在内。或者,如果可能有类似(例如)〜'历史'的理由来包含它。还是应该永远不要将shebang行包含在.pm文件(句号)中,以免我的房子爆炸?

4

2 回答 2

7

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

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

因此,即使考虑到这种可能的例外情况,我也不认为在不打算直接执行的模块文件中包含 shebang 是一种好的风格。

于 2012-09-24T12:48:54.403 回答
4

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

shebang 的目的是让操作系统知道解释器在哪里。不需要将它添加到任何 Perl 文件(脚本或模块)中。在 Windows 下,它无论如何都会被忽略**。

更具体地说,在大多数情况下,没有理由将其添加到模块中,除非出于某种原因您想直接执行该模块。无论如何,Perl 模块实际上只是一个 Perl 脚本,顶部有一个“包”命令。

无论哪种方式,如果它在那里,它不会受到伤害,但在大多数情况下它没有意义。

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

于 2012-09-24T12:54:21.723 回答