Perl 讓你干想干的事,包括很慢或內(nèi)存消耗這樣的事。此處將告訴你如何避免。
while
?而非?for
?來迭代整個文件代替讀取文件的所有行并使用?for
?處理數(shù)組,使用?while
?一次僅讀取一行。
這兩個循環(huán)的功能相同:
for ( <> ) {
# do something
}
while ( <> ) {
# do something
}
差異是?for
?將整個文件讀到臨時數(shù)組,而?while
?一次讀一行。對于小文件, 這可能不重要。但對于更大的文件,它可能吃掉你的所有可用內(nèi)存。
在這種情況下使用?while
?是一種好實踐。
除非絕對必要,不要引起大字符串:
my $copy = "$large_string";
這將創(chuàng)建兩個?$large_string
?的拷貝(一個是?$copy
,而另一個是引起)。 然而:
my $copy = $large_string;
僅創(chuàng)建一個拷貝。
對于字串化大的數(shù)組也是一樣:
{
local $, = "\n";
print @big_array;
}
這比下面的代碼更內(nèi)存高效:
print join "\n", @big_array;
或:
{
local $" = "\n";
print "@big_array";
}
更多建議: