Используя следующие фрагменты кода, я получаю совершенно разные результаты.
$val{"ENOTE"} = 05;
$val{"WATCH"} = 10;
my %sortFunc = ();
my $sortFunc = sub {
my ($va, $vb);
$va = $val{$$a{"etype"} . ":" . $$a{"emsg"}} // $val{$$a{"etype"}};
$vb = $val{$$b{"etype"} . ":" . $$b{"emsg"}} // $val{$$b{"etype"}};
# printf("$$a{etype} gets $va\n");
$$a{"year"} <=> $$b{"year"}
|| $$a{"month"} <=> $$b{"month"}
|| $$a{"day"} <=> $$b{"day"}
|| $$a{"sym"} cmp $$b{"sym"}
|| $va <=> $vb;
};
$sortFunc{"date"} = sub {
my ($va, $vb);
$va = $val{$$a{"etype"} . ":" . $$a{"emsg"}} // $val{$$a{"etype"}};
$vb = $val{$$b{"etype"} . ":" . $$b{"emsg"}} // $val{$$b{"etype"}};
# printf("$$a{etype} gets $va\n");
$$a{"year"} <=> $$b{"year"}
|| $$a{"month"} <=> $$b{"month"}
|| $$a{"day"} <=> $$b{"day"}
|| $$a{"sym"} cmp $$b{"sym"}
|| $va <=> $vb;
};
Когда я их вызываю, я получаю совершенно разные результаты.
@newsortrec = sort $sortFunc (@$rec);
@newsortrec = sort {$sortFunc{"date"}} (@$rec);
Вызов $sortFunc
работает, как я ожидал, и я проверил его вывод.Вывод {$sortFunc{"date"}}
действительно странный.Это не бред, как вы ожидаете, если он получил плохие данные или испортил плохой код.Это просто отсортировано в неправильном порядке.Он изменился и «отсортирован», но действительно странным образом.
Есть ли что-то в таинственных $a
и $b
, которые вызывают у меня горе?
Тот факт, что они(глупо) называть $sortFunc
не должно быть проблемой, не так ли?По крайней мере, что касается perl .
Есть ли что-то другое в правилах определения области действия для $a
и $b
?
У меня diff
Я знал, что код тот же.
Есть подсказки?Я пытаюсь переместить код в хеш (где он работает ... странно).
Спасибо.
-Эрик