quick_sort(grep $_ < $p, @_), $p, quick_sort(grep $_ >= $p, @_);
Давайте разберем это:
@_
- массив аргументов функции.
$_
- временная скалярная переменная, используемая в качестве заполнителя в некоторых контекстах.
grep $_ < $p, @_
Это выражение, которое использует встроенную функцию grep
для создания списка, состоящего из всех элементов из @_
, которые удовлетворяют условию $_ < $p
- то естьвсе элементы, которые численно меньше, чем сводная.
Полученный список передается в quick_sort
, поэтому в результате получается отсортированный список всех элементов, меньших, чем сводная.
То же самое происходит на другой стороне:
quick_sort(grep $_ >= $p, @_);
Это берет все элементы @_
, которые больше, чем центр, и сортирует их.
Наконец:
quick_sort(grep $_ < $p, @_), $p, quick_sort(grep $_ >= $p, @_);
Выражение запятой создает список, состоящий из:
Отсортированный список всех аргументов, меньших, чем элемент pivot.
Элемент pivot.
Сортированный список всех аргументовбольше, чем элемент pivot.
И когда вы объедините все это вместе, вы получите отсортированный список всех аргументов функции.
Но этоэто все глупо.Perl имеет встроенную функцию sort
;Вы могли бы выразить ту же самую вещь намного более кратко как @a = sort { $a <=> $b } @a
, и это фактически было бы намного быстрее.