最終編輯:爲清楚起見,我正在對此問題進行最後一次編輯。我相信已經在所有評論中得到了答覆,但是如果有這樣的選擇,我認爲最好爲未來的讀者清理這個問題。Perl聲明範圍的變量聲明中的效率
我最近繼承了某人的Perl代碼,並且有一個有趣的設置,我想知道它是否可以變得更高效。
該程序設置爲使用strict
和warnings
(因爲它應該)。該程序設置爲使用global
變量;這意味着變量被聲明並初始化爲程序頂部的undef
。然後將特定值超出最初的undef
然後分配給程序內各個循環中的變量。它們設置完成後,會有一個單獨的報告部分(在所有內部循環和子例程運行之後)爲其內容使用變量。
有相當多的變量,它似乎重複只是在程序的頂部做一個初始變量聲明,以便稍後用於輸出/報告的目的(並保持符合嚴格的編譯指示)。根據我的理解和迄今爲止收到的所有意見,似乎這是做到這一點的唯一方法,因爲根據定義,詞彙範圍變量只在其聲明的範圍內持續存在。所以,爲了使它global
它需要提前聲明(即在頂部)。
我只是想知道是否有一個快捷方式將變量的範圍提升爲全局變量,無論它在哪裏聲明,並仍然保持在strict's
參數當然?
我以前的例子是混亂的,所以我會在這裏寫的僞代碼示例要傳達的概念(我沒有與我原來的源):
# Initial declaration to create "Global variables" -- imagine about 30 or so
my ($var1, $var2, $var3); # Global
# Imagine a foreach loop going through a hash and assigning values
# to previously declared variables
for my $k (keys %h){
...
$var = 1; #$var gets set to 1 within the foreach loop
...
}
print "The final calculated report is as follows:\n";
#output $var after loop is done later in program
print "Variable 1 comes to $var1\n";
所以問題:有一個可接受的快捷方式,在foreach
循環中聲明$var1
並將其範圍升級超出foreach
循環,因此它實際上是「Global」?這將避免需要在程序的頂部聲明並初始化爲undef
,並仍然使其可用於程序的輸出中。
根據已收到的反饋,由於定義的範圍約束,答案似乎是一個強調的「否」。
你的問題是什麼? – TLP
是@secJ,它是更好的編碼風格,可以將變量限制在最小範圍內。你有時會看到你從C程序員描述的風格來到perl。另外,應該總是給變量名稱自動記錄代碼。 '$ var'沒有任何通信。但是,這聽起來不像是你有一個可以回答的直接問題,所以無論你應該重新設計還是我們應該把它視爲太寬泛。 – Miller
嗯,不要擔心變量聲明*的效率*。 – ysth