Как знак доллара и номер вместе работают в Perl? - PullRequest
20 голосов
/ 23 декабря 2011

Сегодня я столкнулся с проблемой, которая потребовала от меня определения максимального индекса массива в perl. Раньше я делал это так:

my @array = (1, 2, 3);
print $array[@array - 1];

Но сегодня я наткнулся на этот код:

my @array = (1, 2, 3);
print $array[$#array];

Я не смог найти ничего по этому вопросу в документации. Что это за конструкция $#? Это оператор? И как это работает, это быстрее, чем первый кусок кода? Всегда ли он возвращает максимальный индекс массива? Это устарело или нет?

Я знаю, что это много вопросов, но все они могут быть суммированы одним, и вот что я действительно хочу знать: Как это работает?

Ответы [ 3 ]

24 голосов
/ 23 декабря 2011

Это задокументировано в perldoc perldata, раздел "Скалярные значения" . Короче говоря, $#array - это последний индекс @array. Что касается того, как это работает - это похоже на оператор, но только столько, сколько $ и @ являются операторами. Думайте об этом как особый синтаксис. Последний индекс массива просто «имеет имя». Это переменная, из которой вы можете прочитать и присвоить.

7 голосов
/ 23 декабря 2011

Использование упоминается в первом примере в perldata .Он обозначает индекс последнего элемента в массиве.

Кстати, вы также можете использовать

$array[-1]

для получения последнего элемента.

3 голосов
/ 23 декабря 2011

Это дает вам последний индекс.Это задокументировано в perldata - http://perldoc.perl.org/perldata.html

...