2012-02-16 88 views
9

在類似以下的腳本中,是否可以不刪除'my'來僅有效地聲明'var'一次並使其在BEGIN塊之外可見?BEGIN塊中的變量聲明

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

另外,爲什麼聲明不帶'my'的var使它在BEGIN塊之外可見?

回答

12

放置一個my $var;BEGIN塊:

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

my給出可變詞法作用域,所以$var未在示例的BEGIN塊外定義。刪除my有效地使其成爲全局變量,在賦值後可通過腳本訪問該變量。

+0

彙編命令讓我有些困惑。由於$ var是首先在BEGIN塊中聲明的,爲什麼後面用'my'聲明不會擦除它? – 2015-07-03 08:01:41

2

此外,爲什麼聲明不帶'my'的var使它在BEGIN塊之外可見?

那麼你沒有聲明它。如果您不使用use strict(默認情況下阻止聲明),它會自動聲明爲全局聲明。在單線上,strict比它幫助傷害更多;我完全沒有在這樣的背景下做一個聲明。