Обратите внимание, как документы для shift скажем
shift ARRAY
shift
Учитывая, что вы не передаете ему массив(переменная), но выражение оно сразу же отклоняет.
Позже у них есть комментарий (мой акцент)
Начиная с Perl 5.14, экспериментальная функция позволила shift принять выражение scalar .Этот эксперимент был признан неудачным и был удален с Perl 5.24.
Очевидно, что вы используете 5.24 или более новую версию.
Чтобы понять сообщение об ошибке, см. Документацию для более старой версии., вплоть до 5.22.4 , с
shift ARRAY
shift EXPR
shift
Обратите внимание, что * 1032 нет* там.Они продолжали объяснять, что означает этот EXPR
Начиная с Perl 5.14, shift
может использовать скалярный EXPR, который должен содержать ссылку на необъявленный массив.Аргумент будет разыменован автоматически.Этот аспект shift
считается очень экспериментальным.
Таким образом, более старая версия, увидев выражение, вычислила бы его в скалярном контексте и передала этот скаляр в shift
.(Тогда он жаловался бы на то, что он не является ссылкой на массив.) Тем не менее упоминание " shift on scalar " должно быть информативным, но на данном этапе может быть просто запутанным.
Обратите внимание, что длину неотрицательного целого числа можно получить, взяв length этой строки
my @lengths = reverse sort map { length } @nums;
, что гораздо эффективнее, чем взятие логарифмов.
Кроме того, если вам действительно нужен только самый длинный
use List::Util qw(max);
my $max_length = max map { length } @nums;
, что в этом случае можно сделать еще более эффективно, например
my $max_length = length max @nums;