Массив — это переменная, в которой хранится упорядоченный список скалярных значений. Переменным массива предшествует знак «at» (@). Для ссылки на один элемент массива вы будете использовать знак доллара ($) с именем переменной, за которым следует индекс элемента в квадратных скобках.
Вот простой пример использования переменных массива —
#!/usr/bin/perl @ages = (25, 30, 40); @names = ("John Paul", "Lisa", "Kumar"); print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";
Здесь мы использовали escape-знак (\) перед знаком $, чтобы распечатать его. Другой Perl поймет это как переменную и напечатает ее значение. При выполнении это даст следующий результат —
$ages[0] = 25 $ages[1] = 30 $ages[2] = 40 $names[0] = John Paul $names[1] = Lisa $names[2] = Kumar
В Perl, List и Array часто используются термины, как будто они взаимозаменяемы. Но список — это данные, а массив — это переменная.
Создание массива
Переменные массива начинаются со знака @ и заполняются круглыми скобками или оператором qw. Например —
@array = (1, 2, 'Hello'); @array = qw/This is an array/;
Во второй строке используется оператор qw //, который возвращает список строк, разделяя разделенную строку пробелом. В этом примере это приводит к массиву из четырех элементов; первый элемент — это, а последний (четвертый) — массив. Это означает, что вы можете использовать разные строки следующим образом:
@days = qw/Monday Tuesday ... Sunday/;
Вы также можете заполнить массив, присваивая каждое значение индивидуально следующим образом:
$array[0] = 'Monday'; ... $array[6] = 'Sunday';
Доступ к элементам массива
При доступе к отдельным элементам из массива вы должны поставить перед переменной знак доллара ($), а затем добавить индекс элемента в квадратных скобках после имени переменной. Например —
#!/usr/bin/perl @days = qw/Mon Tue Wed Thu Fri Sat Sun/; print "$days[0]\n"; print "$days[1]\n"; print "$days[2]\n"; print "$days[6]\n"; print "$days[-1]\n"; print "$days[-7]\n";
Это даст следующий результат —
Mon Tue Wed Sun Sun Mon
Индексы массива начинаются с нуля, поэтому для доступа к первому элементу необходимо указать 0 в качестве индексов. Вы также можете указать отрицательный индекс, в этом случае вы выбираете элемент из конца, а не из начала массива. Это означает следующее —
print $days[-1]; # outputs Sun print $days[-7]; # outputs Mon
Массивы последовательных номеров
Perl предлагает ярлык для последовательных чисел и букв. Вместо того, чтобы печатать каждый элемент при подсчете до 100, например, мы можем сделать что-то вроде следующего:
#!/usr/bin/perl @var_10 = (1..10); @var_20 = (10..20); @var_abc = (a..z); print "@var_10\n"; # Prints number from 1 to 10 print "@var_20\n"; # Prints number from 10 to 20 print "@var_abc\n"; # Prints number from a to z
Здесь двойная точка (..) называется оператором диапазона . Это даст следующий результат —
1 2 3 4 5 6 7 8 9 10 10 11 12 13 14 15 16 17 18 19 20 a b c d e f g h i j k l m n o p q r s t u v w x y z
Размер массива
Размер массива можно определить с помощью скалярного контекста массива — возвращаемое значение будет количеством элементов в массиве —
@array = (1,2,3); print "Size: ",scalar @array,"\n";
Возвращаемым значением всегда будет физический размер массива, а не количество допустимых элементов. Вы можете продемонстрировать это, и разница между скалярным @array и массивом $ #, используя этот фрагмент, заключается в следующем:
#!/usr/bin/perl @array = (1,2,3); $array[50] = 4; $size = @array; $max_index = $#array; print "Size: $size\n"; print "Max Index: $max_index\n";
Это даст следующий результат —
Size: 51 Max Index: 50
В массиве содержится только четыре элемента, которые содержат информацию, но длина массива составляет 51 элемент с максимальным индексом 50.
Добавление и удаление элементов в массиве
Perl предоставляет ряд полезных функций для добавления и удаления элементов в массиве. У вас может возникнуть вопрос, что такое функция? До сих пор вы использовали функцию печати для печати различных значений. Точно так же существуют различные другие функции или иногда называемые подпрограммами, которые могут использоваться для различных других функций.
Sr.No. | Типы и описание |
---|---|
1 |
нажмите @ ARRAY, LIST Выдвигает значения списка в конец массива. |
2 |
поп @ARRAY Выскакивает и возвращает последнее значение массива. |
3 |
сдвиг @ ARRAY Сдвигает первое значение массива и возвращает его, сокращая массив на 1 и перемещая все вниз. |
4 |
unshift @ARRAY, LIST Добавляет список в начало массива и возвращает количество элементов в новом массиве. |
нажмите @ ARRAY, LIST
Выдвигает значения списка в конец массива.
поп @ARRAY
Выскакивает и возвращает последнее значение массива.
сдвиг @ ARRAY
Сдвигает первое значение массива и возвращает его, сокращая массив на 1 и перемещая все вниз.
unshift @ARRAY, LIST
Добавляет список в начало массива и возвращает количество элементов в новом массиве.
#!/usr/bin/perl # create a simple array @coins = ("Quarter","Dime","Nickel"); print "1. \@coins = @coins\n"; # add one element at the end of the array push(@coins, "Penny"); print "2. \@coins = @coins\n"; # add one element at the beginning of the array unshift(@coins, "Dollar"); print "3. \@coins = @coins\n"; # remove one element from the last of the array. pop(@coins); print "4. \@coins = @coins\n"; # remove one element from the beginning of the array. shift(@coins); print "5. \@coins = @coins\n";
Это даст следующий результат —
1. @coins = Quarter Dime Nickel 2. @coins = Quarter Dime Nickel Penny 3. @coins = Dollar Quarter Dime Nickel Penny 4. @coins = Dollar Quarter Dime Nickel 5. @coins = Quarter Dime Nickel
Нарезка элементов массива
Вы также можете извлечь «фрагмент» из массива, то есть вы можете выбрать более одного элемента из массива, чтобы создать другой массив.
#!/usr/bin/perl @days = qw/Mon Tue Wed Thu Fri Sat Sun/; @weekdays = @days[3,4,5]; print "@weekdays\n";
Это даст следующий результат —
Thu Fri Sat
Спецификация для среза должна иметь список допустимых индексов, положительных или отрицательных, каждый из которых разделен запятой. Для скорости вы также можете использовать оператор диапазона.
#!/usr/bin/perl @days = qw/Mon Tue Wed Thu Fri Sat Sun/; @weekdays = @days[3..5]; print "@weekdays\n";
Это даст следующий результат —
Thu Fri Sat
Замена элементов массива
Теперь мы собираемся ввести еще одну функцию, называемую splice () , которая имеет следующий синтаксис:
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
Эта функция удалит элементы @ARRAY, обозначенные OFFSET и LENGTH, и заменит их на LIST, если указано. Наконец, он возвращает элементы, удаленные из массива. Ниже приведен пример —
#!/usr/bin/perl @nums = (1..20); print "Before - @nums\n"; splice(@nums, 5, 5, 21..25); print "After - @nums\n";
Это даст следующий результат —
Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20
Здесь фактическая замена начинается с 6-го числа, после чего пять элементов затем заменяются с 6 на 10 номерами 21, 22, 23, 24 и 25.
Преобразовать строки в массивы
Давайте рассмотрим еще одну функцию с именем split () , которая имеет следующий синтаксис:
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
Эта функция разбивает строку на массив строк и возвращает ее. Если указан LIMIT, разбивается на не более того количества полей. Если PATTERN опущен, разделяется на пробел. Ниже приведен пример —
#!/usr/bin/perl # define Strings $var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom"; # transform above strings into arrays. @string = split('-', $var_string); @names = split(',', $var_names); print "$string[3]\n"; # This will print Roses print "$names[4]\n"; # This will print Michael
Это даст следующий результат —
Roses Michael
Преобразовать массивы в строки
Мы можем использовать функцию join (), чтобы воссоединить элементы массива и сформировать одну длинную скалярную строку. Эта функция имеет следующий синтаксис —
join EXPR, LIST
Эта функция объединяет отдельные строки LIST в одну строку с полями, разделенными значением EXPR, и возвращает строку. Ниже приведен пример —
#!/usr/bin/perl # define Strings $var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom"; # transform above strings into arrays. @string = split('-', $var_string); @names = split(',', $var_names); $string1 = join( '-', @string ); $string2 = join( ',', @names ); print "$string1\n"; print "$string2\n";
Это даст следующий результат —
Rain-Drops-On-Roses-And-Whiskers-On-Kittens Larry,David,Roger,Ken,Michael,Tom
Сортировка массивов
Функция sort () сортирует каждый элемент массива в соответствии с числовыми стандартами ASCII. Эта функция имеет следующий синтаксис —
sort [ SUBROUTINE ] LIST
Эта функция сортирует LIST и возвращает значение отсортированного массива. Если указан SUBROUTINE, то указанная логика внутри SUBTROUTINE применяется при сортировке элементов.
#!/usr/bin/perl # define an array @foods = qw(pizza steak chicken burgers); print "Before: @foods\n"; # sort this array @foods = sort(@foods); print "After: @foods\n";
Это даст следующий результат —
Before: pizza steak chicken burgers After: burgers chicken pizza steak
Обратите внимание, что сортировка выполняется на основе ASCII числовых значений слов. Поэтому лучше всего сначала преобразовать каждый элемент массива в строчные буквы, а затем выполнить функцию сортировки.
$ [Специальная переменная
До сих пор вы видели простую переменную, которую мы определили в наших программах, и использовали ее для хранения и печати скалярных и массивных значений. Perl предоставляет множество специальных переменных, которые имеют предопределенное значение.
У нас есть специальная переменная, которая записывается как $ [ . Эта специальная переменная является скаляром, содержащим первый индекс всех массивов. Поскольку массивы Perl имеют индексирование с нуля, $ [почти всегда будет 0. Но если вы установите $ [1, то все ваши массивы будут использовать индексирование на основе. Рекомендуется не использовать любое другое индексирование, кроме нуля. Однако давайте возьмем один пример, чтобы показать использование $ [variable —
#!/usr/bin/perl # define an array @foods = qw(pizza steak chicken burgers); print "Foods: @foods\n"; # Let's reset first index of all the arrays. $[ = 1; print "Food at \@foods[1]: $foods[1]\n"; print "Food at \@foods[2]: $foods[2]\n";
Это даст следующий результат —
Foods: pizza steak chicken burgers Food at @foods[1]: pizza Food at @foods[2]: steak
Объединение массивов
Поскольку массив — это просто последовательность значений, разделенных запятыми, вы можете объединить их вместе, как показано ниже —
#!/usr/bin/perl @numbers = (1,3,(4,5,6)); print "numbers = @numbers\n";
Это даст следующий результат —
numbers = 1 3 4 5 6
Встроенные массивы просто становятся частью основного массива, как показано ниже —
#!/usr/bin/perl @odd = (1,3,5); @even = (2, 4, 6); @numbers = (@odd, @even); print "numbers = @numbers\n";
Это даст следующий результат —
numbers = 1 3 5 2 4 6
Выбор элементов из списков
Нотация списка идентична записи для массивов. Вы можете извлечь элемент из массива, добавив квадратные скобки в список и указав один или несколько индексов —
#!/usr/bin/perl $var = (5,4,3,2,1)[4]; print "value of var = $var\n"
Это даст следующий результат —
value of var = 1
Точно так же мы можем извлекать фрагменты, хотя без обязательного начального символа @ —
#!/usr/bin/perl @list = (5,4,3,2,1)[1..3]; print "Value of list = @list\n";
Это даст следующий результат —