首先,有沒有人有Perl特殊變量的綜合列表?對Perl特殊變量有什麼好的做法?
其次,有沒有更容易使用它們的任務?我總是將$/
設置爲一次讀入文件,並且$|
自動刷新緩衝區,但我不確定其他人。
第三,應該使用Perl的特殊變量,還是應該在編碼時更加明確。就我個人而言,我是使用特殊變量來操縱代碼行爲的迷,但我聽到其他人認爲它只是混淆了事情。
首先,有沒有人有Perl特殊變量的綜合列表?對Perl特殊變量有什麼好的做法?
其次,有沒有更容易使用它們的任務?我總是將$/
設置爲一次讀入文件,並且$|
自動刷新緩衝區,但我不確定其他人。
第三,應該使用Perl的特殊變量,還是應該在編碼時更加明確。就我個人而言,我是使用特殊變量來操縱代碼行爲的迷,但我聽到其他人認爲它只是混淆了事情。
1)至於哪些我經常使用:
$!是典型的IO錯誤處理
$ @爲EVAL錯誤處理調用錯誤設計庫(如數據庫的)時,其編碼器還不夠體貼體面的錯誤處理代碼比其他「死」
$ _對於map/grep塊,儘管我100%同意上面的海報,將它用於常規代碼並不是一個好習慣。
$ |衝廁緩衝區
2)至於使用標點符號與英文名字,我來接上面雖然同反駁也適用於任何人爭辯說,有使用英文名字沒有好處馬克·布林的回答。
「如果你正在使用Perl,你顯然不會選擇它的新手可讀性」
馬克,我發現事實並非總是(或者說幾乎沒有)真。然後,我的99%的Perl經驗是爲大公司編寫產品Perl代碼,其中90%是完整的應用程序而不是10行的黑客腳本,因此我的分析可能不適用於其他領域。原因這種思想作爲馬克的是錯誤的是:
就因爲我是一個Perl非新手(說得客氣一點),有些小白分析師聘請一年前 - 或外包「天才」 - 是可能不會。你可能不想再混淆他們。 「如果代碼難寫,應該很難閱讀」,這在專業開發人員的任何語言的良好態度清單中都不是很高。
當我在凌晨2點,半睡半醒,解決生產問題時,我真的不想依賴我已經近乎瞎眼的能力區分$!和$ |。特別是在前面提到的「天才」編寫的代碼中,他們可能不知道他們中的哪一個使用並切換它們。
當我讀通過一個人誰是咳嗽未完成代碼「重組」 咳嗽出公司在一年前,我寧願專注於扭曲邏輯的複雜性比的可讀性標點符號湯。
它們都記錄在perlvar。
請注意,長名稱只有在您首先使用use English qw(-no_match_vars);
時纔可用。
我使用最多的三個是$_
,@_
和$!
。
我喜歡用$_
通過陣列循環時,檢索參數(如由Motti指出的,這實際上是@_
)或執行的置換:
實施例1.1:
foreach (@items)
{
print $_;
}
實施例1.2:
my $prm1 = shift; # implicit use of @_ or @ARGV depending on context
實施例1.3:
s/" "/""/ig; # implicit use of $_
我用$!
的情況是這樣的:
例2.1:
open(FILE, ">>myfile") || die "Error: $!";
我不同意,雖然,它使代碼更加混亂的人不熟悉Perl。但混淆其他人是瞭解語言的樂趣之一! :)
個人而言,我討厭使用$ _並且儘可能避免使用它(比如foreach my $ item(@items)),但$!絕對有用。 – Powerlord 2009-08-18 16:48:24
我是'$ _'的忠實粉絲,並一直使用它。 – Justin 2009-08-18 16:49:54
查看open的三個參數形式,包含詞法文件句柄:打開我的$ file_handle,'>>','myfile'或者試圖打開[myfile]時死於「Fiery death:$!」' – Telemachus 2009-08-18 16:52:20
我使用的典型的是$_, @_, @ARGV, $!, $/
。其他人我很重視。
布拉德指出,[email protected]
也是一個很常見的變量。 (來自eval()
的錯誤值)。
我會將'$ @'添加到列表中。 – 2009-08-21 16:51:34
永遠記得local
'對標點變量進行修改。一些標點符號是有用的,其他的不應該使用。例如,不應使用$[
(它會更改數組的基本索引,因此local $[ = 1;
將導致1
引用列表或數組中的第一項)。其他人喜歡$"
是iffy。您必須平衡不必手動執行加入的有用性。例如,哪些更容易理解?
local $" = " :: "; #"
my $s = "@a/@b/@c\n";
與
my $sep = " :: ";
my $s = join("/", join($sep, @a), join($sep, @a), join($sep, @a)) . "\n";
或
my $s = join("/", map { join " :: ", @$_ }, \(@a, @b, @c)) . "\n";
我說使用他們 - 如果你正在使用Perl,你顯然不會選擇它的新手可讀性。任何超過臨時開發人員可能都會打開瀏覽器/參考窗口,並且在一個窗口中瀏覽perlvar聯機幫助頁面可能比查找全局或外部變量的定義(以及分配!)更困難。舉個例子,我剛剛遇到的新功能於5.10.x命名的捕獲緩衝區:
/^(?<myName>.*)$/;
# and later
my $capture = %+{'myName'};
並找出發生了什麼事情並不比進入parlvar/perlre,讀一點點任何困難。
我寧願在無證代碼中發現一堆古怪的特殊變量,而不是一堆古怪的算法在無證代碼中。
+1有時他們可能會引起混淆,但我離回答不會超過3秒鐘。 – 2009-08-22 04:38:29