print sort {$a cmp $b} @alpha,' "***MIDDLE STRING***" '; #1
print sort {$a cmp $b} (@alpha,' "***MIDDLE STRING***" '); #2
print (sort {$a cmp $b} @alpha), ' "***MIDDLE STRING***" '; #3
(print sort {$a cmp $b} @alpha), ' "***MIDDLE STRING***" '; #4
print ((sort {$a cmp $b} @alpha), ' "***MIDDLE STRING***" '); #5
print sort {$a cmp $b} @alpha; #6
print ' "***MIDDLE STRING***" ';
print sort(@alpha), ' "***MIDDLE STRING***" '; #7
print sort({$a cmp $b} @alpha), ' "***MIDDLE STRING***" '; #8
# 1 и # 2 эквивалентны: sort
работает со списком, содержащим все элементы @alpha
плюс строка, благодаря автоматическому выравниванию списков в Perl.Возможно, вы захотите добавить несколько скобок вокруг sort
(# 3), но это вам тоже не поможет, поскольку оно интерпретируется как список из двух элементов (# 4): результат вызова print
истрока.Таким образом, строка не будет напечатана, поскольку она не имеет ничего общего с print
.
. Вы можете использовать дополнительный набор скобок (# 5) или разделить его (# 6), но зная sort {$a cmp $b} @alpha
идентичен sort @alpha
, вы можете опустить блок, и скобки станут простыми (# 7).И по тому же правилу, если вам нужна функция сравнения, вы можете поместить оба аргумента в sort
в скобках, не , разделенных запятой (# 8).
Я такженравится определять подпрограммы для различных видов сортировки, чтобы сделать код проще для чтения:
sub numerically { $a <=> $b }
sub backward { $b cmp $a }
print sort(numerically @array); # Sort numerically ascending.
print sort(backward @array); # Sort lexicographically descending.