國際海事組織,一個偉大的事情出來的詞彙$_
是新的_
原型符號。
這使您可以指定一個子程序,以便它將採用一個標量,或者如果沒有提供它將會抓取$_
。
因此,而不是寫:
sub foo {
my $arg = @_ ? shift : $_;
# Do stuff with $_
}
我可以這樣寫:
sub foo(_) {
my $arg = shift;
# Do stuff with $_ or first arg.
}
沒有大的變化,但是當我想要的行爲,它只是簡單得多。去除鍋蓋是一件好事。
當然,這會改變幾個builtins的原型(例如chr
),這可能會破壞一些代碼。
總的來說,我歡迎詞彙$_
。它爲我提供了一個工具,可以用來限制意外數據消除和功能之間奇怪的交互。如果我決定在函數體中使用$_
,通過詞法化它,我可以確定我調用的任何代碼,$_
都不會在調用代碼中被修改。
動態範圍很有趣,但大多數情況下我想要詞法範圍。再加上$_
附近的併發症。我聽說過簡單地做local $_;
的不合適性的可怕警告 - 最好是用for ($foo) { }
代替。詞彙化的$_
給我什麼,當我以任何方式本地化$_
時,我想要100次99次。詞彙$_
使得極大的方便性和可讀性更強大。
我的大部分工作都必須使用perl 5.8,所以我沒有在大型項目中使用詞彙$_
的樂趣。不過,感覺這樣做可以讓$_
更安全,這是一件好事。
我想回答你的問題主要是覆蓋[這裏](http://stackoverflow.com/questions/3393038/does-my-do-anything-if-is-implied)在回答我的問題。 – xenoterracide 2010-08-03 19:37:34
@xenoterracide =>答案肯定涵蓋了詞彙'$ _'的一些方面,但不是全部。這就是我想在這裏介紹的內容。 – 2010-08-03 20:36:45
我知道,但不妨有個好地方開始;) – xenoterracide 2010-08-03 21:02:31