在BEGIN
块中设置变量是有效的perl,但是在BEGIN
块之外声明变量吗?
#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0;
my $var;
BEGIN{ $var = 10 }
say $var;
答案 0 :(得分:7)
是的,这是有效的。实际上,您必须这样做,或者$var
对于BEGIN块是本地的,并且在程序的其余部分中不可用。引用perlsub:
my
具有编译时和运行时效果。在编译时,编译器会注意到它。 ...实际的初始化会延迟到运行时间,因此它会在适当的时间执行,例如每次循环时执行。
编译时效果是您可以访问BEGIN块中的变量的原因。请注意,在评估BEGIN块后,my
上的任何初始化都将发生(因此将覆盖BEGIN可能设置的任何值。)
答案 1 :(得分:3)
是的,但您可能需要小心这种模式,因为非常类似的东西会以不同的方式起作用:
my $var = 5;
BEGIN { $var = 10 }
say $var; # 5