BEGIN块中的变量声明

Phi*_* A. 10 perl

在如下的脚本中,是否可以在不删除'my'的情况下有效地仅仅声明'var'一次并使其在BEGIN块之外可见?

echo -e "\n\n\n" | \
  perl -lne 'BEGIN { my $var="declared & initialized once" } print $var'
Run Code Online (Sandbox Code Playgroud)

另外,为什么在没有'my'的情况下声明var会使它在BEGIN块之外可见?

Zai*_*aid 14

my $var;BEGIN块之前放置一个:

$ perl -le 'my $var; BEGIN { $var = "declared"; } print $var;'
declared
Run Code Online (Sandbox Code Playgroud)

my给出变量词法范围,因此$varBEGIN块外的示例中没有定义.my有效地删除它使它成为一个全局变量,可以在赋值后通过脚本访问它.