Специальные индексы массивов

При записи в элемент с индексом, выходящим за границу массива, массив автоматически расширяется до необходимых пределов – его длина не ограничивается, пока в системе остается свободная память. Если Perl потребуется создать промежуточные элементы, они создаются со значениями undef:

$rocks[0] = 'bedrock'; # Один элемент...
$rocks[1] = 'slate'; # другой...
$rocks[2] = 'lava'; # еще один...
$rocks[3] = 'crushed rock'; # и еще...
$rocks[99] = 'schist'; # А теперь 95 элементов undef

Иногда требуется узнать индекс последнего элемента массива. Для только что показанного массива индекс последнего элемента определяется записью $#rocks.1 Последний индекс не совпадает с количеством элементов, потому что массив начинается с элемента с нулевым индексом:

$end = $#rocks; # 99, индекс последнего элемента
$number_of_rocks = $end + 1; # Допустимо, но можно и лучше
$rocks[ $#rocks ] = 'hard rock'; # Последний элемент

Конструкция $#имя достаточно часто используется в качестве индекса, как в последнем примере, поэтому Ларри создал сокращенную запись: отрицательные индексы, отсчитываемые от конца массива. Если массив состоит из трех элементов, допустимыми являются отрицательные индексы –1 (последний элемент), –2 (средний элемент) и –3 (первый элемент). Впрочем, в реальных программах никто не использует другие отрицательные индексы, кроме –1.

$rocks[ -1 ] = 'hard rock'; # Проще, чем в предыдущем примере
$dead_rock = $rocks[-100]; # Возвращает 'bedrock'
$rocks[ -200 ] = 'crystal'; # Фатальная ошибка!

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
в списочном контексте
Главная служебная переменная: $_
Интерполяция массивов в строках
Использование выражений, создающих скаляры, в списочном контексте
Использование выражений, создающих списки, в скалярном контексте

Вернуться в раздел: Perl / 2. Списки и массивы