有一個Perl的腦傳情:爲什麼Perl的for()不會遍歷數組中的所有元素?
my @l = ('a', 'b', 'c');
for (@l) {
my $n = 1;
print shift @l while (@l and $n --> 0);
print "\n";
}
什麼是它打印?應該是a,b和c,對嗎?但是,哦,等一下,實際上有一個地方的錯誤,它只打印一個和B。可能只是一些愚蠢的錯誤,應該很容易解決,對吧?
好了,所以做一個小的代碼更改測試的東西出來,改變@l到
my @l = ('a', 'b', 'c', 'd');
什麼是它打印?可能是a,b和c,因爲那個愚蠢的一個,對吧? ...等一下,實際上它仍然只打印a和b。好吧,所以錯誤在於它只打印前兩個字符。
變化@l再次
my @l = ('a', 'b', 'c', 'd', 'e');
嗯,現在它打印,b和c。但不是d或e。實際上,從現在開始我們添加的每兩個字母將使它打印序列中的下一個字母。所以如果我們添加f,它仍然會打印a,b和c,但是如果我們添加f和g,它會打印出a,b,c和d。
對於$ n的不同值,這也會發生類似的結果。
那麼這裏發生了什麼?
Josh McAdams寫了有關有效Perl編程的第二版。總之,不要改變你正在迭代的列表。 – 2010-01-06 17:07:21
啊,我最喜歡的操作符' - >'...... :) – Ether 2010-01-06 17:11:59