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