В Perl, я могу сделать:
my @unit_indices = sort {
$units{$b}[0] <=> $units{$a}[0]
or
$a cmp $b
} keys %units;
, который сортирует по одному полю (массив элементов), сходящего и другой (хэш-ключ) восходящей, но вызывает perlcritic
жаловаться:
упаси $ B перед $ a в блоках сортировки по строке X, столбец Y. См. стр. 152 PBP. (Серьезность: 1)
Perl Best Practices рекомендует использовать вместо reverse
.
Но операция была бы гораздо более понятной, если Вы писали:
@sorted_results = обратный порядок сортировки @unsorted_results;
Однако я не нашел способ иметь подсерии, которые работают в противоположных направлениях.
Очевидно, я могу сказать perlcritic
, чтобы проигнорировать это, но я хотел бы знать, как выполнить то, что мне нужно, и сделать perlcritic
счастливым.
Почему в мире вы бы использовали непобедимый 'perlcritic' ??? Это невероятно ошеломительно. Это твоя первая ошибка. Во-вторых, вы путаете советы PBP. Ваша начальная функция сортировки прекрасна, за исключением того, что я, конечно, избегаю 'или' вместо' || 'для улучшения удобочитаемости. Ваш вопрос озадачен, потому что вы четко знаете правильный способ сделать это уже. – tchrist
Ваш код выглядит хорошо. Звучит как ошибка в perlcritic - $ a и $ b являются действительными perl-переменными для сортировки. Он должен только предупреждать, что $ a и $ b существуют вне блока сортировки для этой области действия и любых блоков внутри цикла. Похоже, он не обнаруживает множественные ключи. – Rich
Аналогичная проблема была сообщена https://rt.cpan.org/Public/Bug/Display.html?id=36129 – toolic