我对 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;
...
}
但是让我们假设 sort 函数更复杂,所以它不会完全适合上面的代码。
如果我尝试使用函数(在 for 循环范围内本地定义),我会不断收到“在哈希元素中使用未初始化的值”。
我认为这是因为 sub 被解析一次,而不是为 for 循环的每次迭代重新创建。我试图了解如何实现一个每次迭代都会重新解释的代码块,或者如何传递参数