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

时间:2011-03-13 23:29:13

标签: perl return-value perl-module

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

4 个答案:

答案 0 :(得分:38)

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

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

来自wikipedia Perl module

   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).

答案 3 :(得分:3)

  

1;

     

加载模块时(通过使用)   编译器会抱怨,除非   最后一个语句执行时   加载是真的。这条线确保了这一点   情况就是这样(只要你不这样做   在此行之后放置任何代码)。它的   Perl确保它的方式   成功解析到了   文件的结尾。

请参阅http://mathforum.org/~ken/perl_modules.html

您可以使用任何评估为true的语句。 1恰好成了一个成语。