在如下的脚本中,是否可以在不删除'my'的情况下有效地仅仅声明'var'一次并让它在BEGIN块之外可见?
echo -e "\n\n\n" | \
perl -lne 'BEGIN { my $var="declared & initialized once" } print $var'
另外,为什么在没有'my'的情况下声明var会使它在BEGIN块之外可见?
答案 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
比它有帮助的伤害更多;我完全没有在这样的背景下做宣言。