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

Я предполагаю, что это потому, что подпрограмма анализируется один раз, а не воссоздается для каждой итерации цикла for. Я пытаюсь понять, как реализовать блок кода, который будет переинтерпретироваться на каждой итерации, или, может быть, как передать параметры

7
задан Greg 8 May 2012 в 15:32
поделиться