为什么每个perl包的末尾都有1?

为什么每个perl包的末尾都有1?,perl,return-value,perl-module,Perl,Return Value,Perl Module,如果忘记了包末尾的1,Perl会告诉您“包没有返回真值”。好的,如果它知道您忘记了它,为什么不把它放在那里呢?因为如果require指令必须成功(返回的真值)或失败(返回的假值);如果模块由于某种原因未能初始化,这是有意义的,Perl模块需要返回一个值来发出信号 如果您没有返回任何内容,解释器将无法知道require必须成功还是失败;同时,由于很容易忘记将真值放在包的末尾,因此建议对此错误进行“常见修复”:添加真值作为返回 有关模块返回值的其他信息/民间传说,请查看。如果无法初始化,例如,如果无

如果忘记了包末尾的1,Perl会告诉您“包没有返回真值”。好的,如果它知道您忘记了它,为什么不把它放在那里呢?

因为如果
require
指令必须成功(返回的真值)或失败(返回的假值);如果模块由于某种原因未能初始化,这是有意义的,Perl模块需要返回一个值来发出信号

如果您没有返回任何内容,解释器将无法知道
require
必须成功还是失败;同时,由于很容易忘记将真值放在包的末尾,因此建议对此错误进行“常见修复”:添加真值作为返回


有关模块返回值的其他信息/民间传说,请查看。

如果无法初始化,例如,如果无法找到所需的数据文件或外部库,则程序包可能返回假值。通过这种方式,它在加载时完全失效(甚至可以对这种失效进行测试),而不是在以后不可预测地失效

一,

加载模块时(通过使用) 除非 执行时执行的最后一条语句 这是真的。这条线确保 情况就是这样(只要你不 将任何代码放在这一行之后)。它是 Perl确保 已成功解析到 文件的结尾

您可以使用任何计算结果为true的语句。1刚好一个应用程序变成了perl惯用语。

来自:


如果您忘记把它放在那里,这是否意味着您可能不需要发出任何初始化失败的信号?既然这似乎是一个非常特殊的案例,我们难道不能安全地假设它会成功,除非我们告诉它有可能不会成功吗?@Chris:我们可以争论什么会更好或更符合逻辑,但语言是这样设计的,谈论它不会改变这种行为
:)
(我个人认为现在更好:如果请求返回值,那么您必须指定它)@Matteo-由于Perl 6仍处于开发的“无限未来”阶段,我认为谈论该语言可以(几乎肯定会)改变它的行为。@Chris:当然,我说的是当前的Perl;不过,我不认为他们会改变它,首先是“如果请求返回值,那么您必须指定它”,然后是因为整个“返回奇怪的真值”已经成为Perl民间传说的一部分<代码>:)它不再有实际用途,与它提供的持续烦恼相比就没有了。删除需求并不会停止继续工作。至于咆哮、抱怨和希望语言不同是没有意义的。。。这是Perl。我们带来了我们自己的变化。查看一下
true.pm
perl5i
都消除了这一错误特性。这也可能是一个
use 5.16
功能。您需要。如果无法初始化,程序包可以返回一个假值,但不应该返回。带着一条有用的信息死去会更好。
   A Perl module must end with a true value or else it is considered not to
   have loaded.  By convention this value is usually 1 though it can be
   any true value.  A module can end with false to indicate failure but
   this is rarely used and it would instead die() (exit with an error).