Язык программирования Perl | страница 42
>
$" = ':'; # установим разделитель элементов
print "@array";
С помощью индексов можно обращаться не только к элементам массива, но и к элементам списка, в том числе и литерального. Для этого после закрывающей скобки списка указывается значение индекса в квадратных скобках:
>
$fifth = (10..15)[5]; # то же, что $fifth = 15;
Обращение по индексу к элементу в списке констант приобретает смысл, если индекс динамически вычисляется при выполнении программы. Вот, например, один из способов преобразовать десятичное число в шестнадцатеричное:
>
$hex = (0..9,'A'..'F')[$dec]; # при $dec==12 в $hex будет 'C'
Подобным же образом удобно обращаться к элементу списка, возвращаемого функцией. Например, так можно извлечь день месяца, зная, что у него 3-й индекс в результирующем списке функции localtime:
>
$month_day = (localtime)[3]; # элемент списка с индексом 3
В Perl есть удобная форма обращения к нескольким элементам массива одновременно, называемая срезом массива. Срез (slice) - это набор элементов массива, заданный списком индексов этих элементов. Срез обозначается квадратными скобками после имени массива, в которых перечислены индексы элементов. Поскольку значение среза - это список, при записи среза перед именем массива сохраняется префикс @. Срез массива в частном случае может состоять из одного значения, заданного одним индексом. Вот примеры срезов массивов:
>
@array[0,1] # то же, что ($array[0], $array[1])
@array[5..7] # то же, что ($array[5],$array[6],$array[7])
@array[3,7,1] # то же, что ($array[3],$array[7],$array[1])
@array[@indexes] # срез, заданный массивом индексов
@array[5] # список ($array[5]), а не скаляр $array[5]
С помощью срезов удобно одновременно манипулировать значениями нескольких элементов, находящихся в любом месте массива:
>
# присвоить значения пяти элементам:
@array[5..9] = qw(FreeBSD Linux MacOS NetWare Windows);
# поменять местами значения 1-го и последнего элементов:
@array[0,-1] = @array[-1,0];
# напечатать элементы с индексами от $start до $finish
print @array[$start .. $finish];
Срезы могут применяться не только к массивам, но и к любым спискам, в том числе литеральным.
Для работы с таким популярным типом данных, как массивы, в Perl существует много удобных функций. Когда требуется организовать обработку списка, поочередно извлекая из него элементы, начиная с первого, применяется встроенная функция shift. Она удаляет из массива первый элемент, возвращая его значение. Когда shift применяется к пустому списку, она возвращает неопределенное значение: