可能重复:
Why do you have to put a 1; at the end of a Perl 5 module?
在此页Perl::Critic::Policy::Subroutines::RequireFinalReturn中,这是一个代码示例
package Password;
# every time the user guesses the password wrong, its value
# is rotated by one character
my $password;
sub set_password {
$password = shift;
}
sub check_password {
my $guess = shift;
if ($guess eq $password) {
unlock_secrets();
} else {
$password = (substr $password, 1).(substr $password, 0, 1);
}
}
1;
1;
?该语句对编译器有何意义?答案 0 :(得分:7)
这是因为Perl模块必须返回“true”才能使其作为模块运行。如果模块没有返回true,则假定它的初始化失败,它等同于调用die
。但是,如果代码不用作模块,则不需要,因此,除非您尝试将代码示例用作模块,否则您将看不到差异。
1;
可能只是回归真实的最简洁方法之一。
如果你看一下this site,就会发现人们的回报值很有创意。
答案 1 :(得分:4)
以下是perldoc -f require的引用:
该文件必须返回true作为最后一个 声明表明成功 执行任何初始化代码, 所以习惯上结束这样的文件 用1;除非你确定它 否则返回true。但它更好 只是把1; ,如果你添加 更多陈述。
如果我从模块中删除1;
,然后在另一个脚本中尝试use,我会收到编译错误:
Password.pm did not return a true value
BEGIN failed--compilation aborted