看板 Perl 關於我們 聯絡資訊
謝謝兩位的回答~ 我把問題表答的清楚一點... ※ 引述《lzch (再努力一點...)》之銘言: Perl 學習手冊 4e, O'REILLY p.256 完整程式如下: #!/usr/bin/perl sub total { my $sum; foreach (@_) { $sum += $_; } $sum; } sub average { if (@_ == 0) { return } my $count = @_; my $sum = &total(@_); $sum/$count; } sub above_average { my $average = &average(@_); my @list; foreach $element (@_) { if ($element > $average) { push @list, $element; } } @list; } my @fred = &above_average(1..10); print "\@fred 的內容為 @fred\n"; print "(結果應該是 6 7 8 9 10)\n"; my @barney = &above_average(100, 1..10); print "\@barney 的內容為 @barney\n"; print "(結果應該是 100 )\n"; ... ... 副常式 above_average,會建立所需要之項目所構成之串列,並傳回 它。(為何迴圈的控制變數是 $element,而不是 Perl 最喜愛的預設 變數 $_?)請注意,這個副常式對於空串列有不同的處置方式。 == 我沒有原文,但是就我這本書讀到現在為止, 我以為作者的意思是,這裡不用 foreach (@_) 而用 foreach $element (@_) 是有特別的用意。(雖然我有試過將所有 $element 都換成 $_,仍可執行成功) 又或者和最後一句黃色部份有關?? 還是我想太多了呢 :p -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.230.41
redmist:這個$element叫做enumerator, 在多層迴圈裡,若內層回圈需 10/17 00:31
redmist:要用到外層迴圈的值時就非用不可如 @i= (1,2,3)@j=(6,7,8) 10/17 00:33
redmist:要算所有i+j就一定要用這種方式 另外在'Perl最佳實務'這書 10/17 00:35
redmist:提到若迴圈內容複雜時 $_符號會影響閱讀 所以該書作者極力 10/17 00:37
redmist:建議使用enumerator 10/17 00:39
redmist:說錯 叫iterator才對 中文名稱是反覆器 10/17 00:39
lzch:謝謝 redmist :) 10/19 11:17