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