Perl中的“1”是什么意思?

我遇到了几个Perl模块,例如看起来类似于下面的代码:

package MyPackage; use strict; use warnings; use constant PERL510 => ( $] >= 5.0100 ); require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw( ); { #What is the significance of this curly brace? my $somevar; sub Somesub { #Some code here } } 1; 

1;的意义是什么1; 以及附上$somevar和Sub的大括号?

1在模块的末尾意味着模块返回trueuse/require语句。 它可以用来判断模块初始化是否成功。 否则, use/require将失败。

$somevar是一个只能在块内部访问的variables。 它被用来模拟“静态”variables。 从Perl 5.10开始,您可以使用关键字state关键字来获得相同的结果:

 ## Starting from Perl 5.10 you can specify "static" variables directly. sub Somesub { state $somevar; } 

use Foorequire()加载模块“Foo”时,perl像普通脚本一样执行Foo.pm文件。 如果模块加载正确,它期望它返回一个真正的值。 1; 这样做。 可能是2;"hey there"; 同样如此。

$somevar声明周围的块以及函数Somesub限制variables的范围。 这样,它只能从Somesub访问,并且不会在每次调用Somesub清除(如果在函数体内声明的话)。 这个习惯用法在最近版本的perl(5.10及更高版本)中已经被取代,它们有state关键字。

模块必须返回一个真正的值。 1是一个真正的价值。

Perl模块必须返回一些评估为true的东西。 如果他们不这样做,Perl会报告错误。

 C:\temp>cat MyTest.pm package MyTest; use strict; sub test { print "test\n"; } #1; # commented out to show error C:\temp>perl -e "use MyTest" MyTest.pm did not return a true value at -e line 1. BEGIN failed--compilation aborted at -e line 1. C:\temp> 

虽然习惯使用“1”,但任何评估为真的东西都可以工作。

 C:\temp>cat MyTest.pm package MyTest; use strict; sub test { print "test\n"; } "false"; C:\temp>perl -e "use MyTest" C:\temp> (no error here) 

由于显而易见的原因,另一个stream行的返回值是42

http://returnvalues.useperl.at/values.html上有一个很酷的返回值列表。;

大括号限制局部variables$ somevar的范围:

{我的$ somevar; …}#$ somevar的范围在这里结束

从要求的文件:

该文件必须返回true作为最后一个语句来指示任何初始化代码的成功执行,所以通常以1结束这样的文件; 除非你确定否则会返回true。 但是最好把1; ,以防你添加更多的语句。

我不太了解Perl,但通常使用大括号来创build一个范围。 大概$ somevar不应该在全球范围内可用?