Двойной индекс в Perl, почему это так? - PullRequest
3 голосов
/ 21 июня 2010

с

@a=(6,3,5,7);

@b=(@a[0..3])[2..3];

print @b;

#print 57

но для

@b=@a[0..3][2..3];

я получаю синтаксическую ошибку.Может кто-нибудь объяснить, почему?

Ответы [ 2 ]

8 голосов
/ 21 июня 2010

$ a [1] [2] для используется для двухмерных таблиц, на самом деле это сокращение от $ a [1] -> [2]

, поэтому для первой индексации необходимо вернуть ссылку, а не фрагмент массива.

Синтаксическая ошибка происходит из-за того, что Perl не знает, как разыменовать массив.

3 голосов
/ 21 июня 2010
@a=(6,3,5,7);

Создает массив из 4 элементов.

(@a[0..3])

Возвращает список с теми же четырьмя элементами, что и @a.

(@a[0..3])[2..3];

Выбирает последние два элемента из списка из 4 элементов в скобках.

print( join( ",", @b ) );

Это печатает 5,7, последние два элемента в @a.

Для развлечения попробуйте следующее:

@a=(6,3,5,7);
@b=(@a[0..3]);
print( "\@b=" . join(",",@b) . "\n" );
@c=@b[2..3];
print( "\@c=" . join(",",@c) . "\n" );

Обратите внимание, что я использовал отладчик Perl для понимания вашей программы. Вы также можете сделать это, если не уверены, что на самом деле делает Perl от строки к строке.

...