У меня есть вопрос относительно блоков кода в 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 ), я продолжаю получать сообщение «Использование неинициализированного значения в хеш-элементе».
Я предполагаю, что это потому, что подпрограмма анализируется один раз, а не воссоздается для каждой итерации цикла for. Я пытаюсь понять, как реализовать блок кода, который будет переинтерпретироваться на каждой итерации, или, может быть, как передать параметры