我有一个关于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