Что ж, вполне вероятно, что либо $a
, либо $b
передается в виде строки.Попробуйте распечатать эти переменные после назначения.
Из того, что я вижу из документации, когда вы передаете elements => [ Array => 0 ]
, если 0-й элемент в массиве не является массивом, вы будете сравнивать только значения в первомслот массива.
[Array => $index]
- Указывает, что элементы являются ссылками на массив с ключом в индексе $ index.Таким образом, теперь элемент может быть не только ключом, но и связанными данными.
Это означает, что если 2,55 находится в массиве, как [2.55, ...], то это то, что передаетсяв виде $a
или $b
.
Запись elements
сообщает H::S
, как вы хотите получить ключ.Для совершенно общего способа написано, что вы можете передать [Function => $code_ref_for_key]
.Вы можете сделать это так:
sub first_two_slots {my $ array_ref = shift;return [@ $ array_ref [0,1]];}
И затем с указанным порядком он передаст этот массив в ваш заказ и укажет
my $heap = Heap::Simple->new( order => \&byNumOrStr,
elements => [Function => \&first_two_slots]
);
Исходный комментарий, оставленный на месте: (Это не имеет отношения к тому, как Heap::Simple
вызывает вызов).
, если byNumOrStr
вызывается из sort
НЕ назначать $a
и $b
в нем.Эти значения установлены sort
.Если что-то приходит в @_
, это, вероятно, не то, что вы хотите.