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