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
在模块的末尾意味着模块返回true
以use/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 Foo
或require()
加载模块“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
大括号限制局部variables$ somevar的范围:
{我的$ somevar; …}#$ somevar的范围在这里结束
从要求的文件:
该文件必须返回true作为最后一个语句来指示任何初始化代码的成功执行,所以通常以1结束这样的文件; 除非你确定否则会返回true。 但是最好把1; ,以防你添加更多的语句。
我不太了解Perl,但通常使用大括号来创build一个范围。 大概$ somevar不应该在全球范围内可用?