Я только что взял на себя обслуживание части системы Perl. Машина, с которой она работала, мертва, поэтому я не знаю, какую версию Perl она использовала, но она работала. Она включала в себя следующую строку для подсчета строк в странице ASCII текста
my $lcnt = $#{@{$page{'lines'}}};
В Perl 5.10.1 (мы сейчас работаем это на CentOS 6.3) выше код больше не работает. Вместо этого я использую следующее, которое отлично работает.
my @arr = @{$page{'lines'}};
my $lcnt = $#arr;
Я признаю, мой Perl не велик, но от того, что я могу видеть первый вариант никогда не должен был сработать, как это пытается почтительным массив, а не реф массив
Первого вопроса - это моя догадка о том, почему эта первая строка кода теперь не работает правильно, а во-вторых, она работает раньше из-за исправленной ошибки в предыдущей версии Perl?
Спасибо!
$ # дает вам последний индекс массива ... если ваш массив содержит строки, $ # arr - количество строк -1. здесь вы должны рассмотреть использование скаляра, который возвращает количество элементов в массиве. – Pierre
- это '$ page {'lines'}' массив или ссылка на один? –
Что означает «больше не работает»? Исходный код не является синтаксической ошибкой - что он делает сейчас (я бы догадался, что он возвращает -1), что он сделал, и как вы знаете? – pilcrow