我有一個關於perl代碼塊的問題。給定以下代碼:perl代碼塊
my @newArr = sort { $a <=> $b } @oldArr;
使用代碼塊作爲參數。
,我可以把它改寫爲:
sub sortFunc {
return $a <=> $b;
}
my @newArr = sort sortFunc @oldArr;
我試圖找出這個機制是如何工作的。 目前我需要實現一種複雜的排序功能,在代碼塊中看起來很亂,但它取決於一些局部變量。 例如:
foreach my $val (@values){
my @newArr = sort { $hash{$a}{$val}<=> $hash{$b}{$val} } @oldArr;
...
}
但是讓我們假設排序功能更加複雜,所以它不會完全適合上面的代碼。
如果我嘗試使用的功能(在for循環範圍的本地定義),我不斷收到「散列元素未初始化值的使用」。
我想那是因爲子被解析一次,而不是重新爲循環的埃夫裏迭代。我正在嘗試瞭解如何實現將在每次迭代中重新解釋的代碼塊,或者如何傳遞參數
'我@newArr =排序{$一個<=> $ B} @oldArr;'根據本什麼的@oldArr是什麼意思? –
「但讓我們假設排序函數更復雜」 - >也許你應該發佈你的代碼這種排序功能。 – TLP