1

perl 在块中设置变量是否有效BEGIN,但在块外声明变量BEGIN

#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0;

my $var;

BEGIN{ $var = 10 }

say $var;
4

2 回答 2

8

是的,它是有效的。事实上,您必须这样做,否则$var将位于 BEGIN 块的本地,并且在程序的其余部分中不可用。引用perlsub

Amy同时具有编译时和运行时效果。在编译时,编译器会注意到它。...但是,实际初始化会延迟到运行时,因此它会在适当的时间执行,例如每次通过循环时。

编译时效果是您可以访问 BEGIN 块中的变量的原因。请注意,在评估 BEGIN 块之后my将进行任何初始化(因此将覆盖 BEGIN 可能设置的任何值。)

于 2013-08-29T15:12:55.427 回答
4

是的,但您可能要小心这种模式,因为非常相似的东西会与您预期的不同:

my $var = 5;
BEGIN { $var = 10 }

say $var; # 5
于 2013-08-29T15:16:49.403 回答