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

问题描述 投票:0回答:4

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

perl perl-module
4个回答
42
投票

因为 Perl 模块需要返回一个值来指示

require
指令是否必须成功(返回真值)或失败(返回假值;如果模块由于某种原因未能初始化,这可能是有意义的)。

如果不返回任何内容,解释器无法知道

require
一定成功还是失败;同时,由于很容易忘记将真实值放在包的末尾,因此建议对此错误的“常见修复”:添加真实值作为返回。

有关模块返回值的其他一些信息/民间传说,请查看这个问题


5
投票

如果包无法初始化,例如找不到所需的数据文件或外部库,则可能会返回错误值。这样,它就会在加载时彻底失败(甚至可以测试这种失败),而不是稍后不可预测地失败。


4
投票

来自 wikipedia Perl 模块

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

4
投票

1;

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

参见链接

您可以使用任何评估为 true 的语句。 1 恰好成为 Perl 惯用语。

© www.soinside.com 2019 - 2024. All rights reserved.