BEGIN块和变量声明

时间:2013-08-29 15:02:50

标签: perl syntax

BEGIN块中设置变量是有效的perl,但是在BEGIN块之外声明变量吗?

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

my $var;

BEGIN{ $var = 10 }

say $var;

2 个答案:

答案 0 :(得分:7)

是的,这是有效的。实际上,您必须这样做,或者$var对于BEGIN块是本地的,并且在程序的其余部分中不可用。引用perlsub

  

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

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

答案 1 :(得分:3)

是的,但您可能需要小心这种模式,因为非常类似的东西会以不同的方式起作用:

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

say $var; # 5