В Perl, sort
не изменяет массив;возвращает отсортированный список.Вы должны назначить этот список где-нибудь (либо обратно в исходный массив, либо где-то еще).
@{ $hash{$item}{'lengths'} } = sort @{ $hash{$item}{'lengths'} };
Или (особенно если массив находится глубоко во вложенном хэше):
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort @$arrayref;
Ваш исходный код сортировал массив, а затем выбрасывал отсортированный список, поэтому он выдает это предупреждение.
Примечание: Как указано salva out, по умолчанию sort
выполняет сравнение строк.Возможно, вам нужна числовая сортировка, которую вы получите, используя sort { $a <=> $b }
вместо просто sort
:
my $arrayref = $hash{$item}{'lengths'};
@$arrayref = sort { $a <=> $b } @$arrayref;
Но это не имеет ничего общего с предупреждением, о котором вы спрашивали.