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

min*_*iml 35 perl perl-module return-value

如果你忘记了软件包末尾的1,Perl会告诉你"软件包没有返回真值".好吧,如果它知道你忘了它,为什么不把它放在那里呢?

Mat*_*lia 39

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

如果你没有返回任何东西,那么翻译就无法知道require必须成功还是失败; 同时,由于很容易忘记将真值放在包的末尾,它建议对此错误进行"常见修复":添加一个真值作为返回.

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

  • 它不再具有实际用途,与其提供的持续烦恼相比.删除要求并不会阻止`$ ret = require Foo`继续工作.至于咆哮和抱怨没有任何意义,并且希望语言不同......这就是Perl.我们带来了自己的变化.看看`true.pm`和`perl5i`都可以消除这种错误.它也可以作为"使用5.16"功能. (4认同)
  • @Chris:我们可以争论什么会更好或更合乎逻辑,但语言是以这种方式设计的,谈论它不会改变这种行为.`:)`(就我个人而言,我认为它现在更好:如果要求返回值,那么你*必须*指定它) (3认同)

Ano*_*mie 5

如果包无法初始化,则包可以返回false值,例如,如果找不到所需的数据文件或外部库.这样它在加载时干净地失败(甚至可以测试这种失败),而不是以后不可预测.