BEGIN块中的变量声明

时间:2012-02-16 17:36:35

标签: perl

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

echo -e "\n\n\n" | \
  perl -lne 'BEGIN { my $var="declared & initialized once" } print $var'

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

2 个答案:

答案 0 :(得分:14)

my $var;区块之前放置BEGIN

$ perl -le 'my $var; BEGIN { $var = "declared"; } print $var;'
declared

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

答案 1 :(得分:2)

  

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

你当时没有宣布。如果您没有使用use strict(默认情况下会阻止声明),它会自动声明为全局声明。在单行中,strict比它有帮助的伤害更多;我完全没有在这样的背景下做宣言。