14
A
回答
11
本地($ X)節省掉全局變量$ x的舊值和 分配的子程序的持續時間是從子程序調用的其他功能 可見一個新值。這在運行時完成 ,所以稱爲動態作用域。 local()總是影響全局變量,也稱爲包變量或動態變量。
my($ x)創建一個新變量,該變量僅在當前的 子例程中可見。這是在編譯時完成的,所以它被稱爲詞法或靜態作用域。 my()總是影響私有變量,也稱爲 詞法變量或(不正確)靜態(範圍)變量。
在Perl-FAQ's看看:
8
my
創建一個局部變量。local
沒有。
3
我會添加一個快速示例。
$var = "Global";
sub inner {
print "inner: $var\n";
}
sub changelocal {
my $var = "Local";
print "changelocal: $var\n";
&inner
}
sub changedynamic {
local $var = "Dynamic";
print "changedynamic: $var\n";
&inner
}
&inner
&changelocal
&changedynamic
這給出以下輸出(添加註釋)。
inner: Global # Finds the global variable.
changedynamic: DynamiC# Dynamic variable overrides global.
inner: DynamiC# Find dynamic variable now.
changelocal: Local # Local variable overrides global.
inner: Global # The local variable is not in scope so global is found.
您可以將動態變量想象爲掩蓋您調用的函數的全局。詞彙作用域變量只能從最近的大括號內的代碼中看到。
相關問題
- 1. 本練習中的靜態和動態範圍界定有什麼區別?
- 2. 範圍和連接有什麼區別?
- 3. ColdFusion中THIS範圍和APPLICATION範圍有什麼區別?
- 4. 「perl -n」和「perl -p」有什麼區別?
- 5. c + +動態綁定和java動態綁定有什麼區別?
- 6. Angular:'='和'=?'有什麼區別而在指令定義範圍
- 7. Perl中'for'和'foreach'有什麼區別?
- 8. Perl中的'eq'和'=〜'有什麼區別?
- 9. Perl中BAREWORD和* BAREWORD有什麼區別?
- 10. Perl中$ dxyabc和$ {dxyabc}有什麼區別?
- 11. Perl中grep和map有什麼區別?
- 12. 動態綁定和動態加載有什麼區別?
- 13. ()和[]動態分配有什麼區別?
- 14. C中的結構和函數範圍有什麼區別?
- 15. ruby中的數組和範圍有什麼區別?
- 16. 「perl test.pl」和「./test.pl」有什麼區別?
- 17. 在Strawberry Perl中,perl \ lib和perl \ site \ lib有什麼區別?
- 18. 安裝Rubygems「本地」和「系統範圍」有什麼區別?
- 19. 「初始範圍」和「需求」有什麼區別?
- 20. 春季請求和會話範圍有什麼區別?
- 21. 範圍和封裝有什麼區別? (C++)
- 22. 系統範圍的vimrc和用戶的vimrc有什麼區別?
- 23. 有什麼區別:超出範圍和:無效?
- 24. JPA和JDO規範有什麼區別?
- 25. 「使用」和範圍界定之間的區別?
- 26. 在PlayN Graphics界面中,height和screenHeight方法有什麼區別?
- 27. C中的靜態和動態數組有什麼區別?
- 28. 數據結構中的靜態和動態有什麼區別
- 29. 有什麼區別bettwen靜態和動態變量在C#中?
- 30. 動態鏈接和動態加載有什麼區別
非常感謝你 – Anil
「my($ x)創建一個只在當前子程序中可見的新變量」。那是不正確的。 'my'創建一個只在當前*代碼塊*中可見的新變量。一個子程序只是一個塊的一個例子。你在'local'的定義中出現類似的錯誤。 –
@ O.D http://perldoc.perl.org/perlsyn.html#Basic-BLOCKs – TLP