Масиви та списки містять упорядковану колекцію скалярів. Якщо не використовувати посилання (про них ітиметься в окремій темі), це означає, що масиви та списки завжди пласкі, тобто вони не можуть містити інших масивів чи списків.
Здебільшого списки беруть у дужки (), а їхні елементи розділяють комами ,.
Змінну-масив зазвичай наповнюють, присвоївши їй список, наприклад my @names = ('Alice', 'Bob', 'Charlie');.
До елементів масиву чи списку можна отримати доступ, указавши індекси в дужках, наприклад ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.
Індекси в Perl починаються з 0.
Відʼємні індекси відраховуються від кінця масиву чи списку, наприклад ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.
Для роботи з масивами та списками реалізовано багато функцій; серед найкорисніших: grep для нового списку відфільтрованих елементів, які відповідають умові, map для перетворення елементів на новий список значень і sort для нового списку перевпорядкованих елементів.
Функції для зміни масивів охоплюють push для додавання елементів у кінець, pop для вилучення останнього елемента, shift для вилучення першого елемента, unshift для додавання елементів на початок і splice для складніших змін.
Часто доводитиметься й перебирати масиви та списки за допомогою інструкції for(each).
Коли ми звертаємося до елементів масиву, результат визначає використаний сигіл.
Саме дужки [] у кінці назви змінної вказують Perl, що ми звертаємося до масиву з цією назвою.
my @names = ('Alice', 'Bob', 'Charlie');
$names[0]; # 'Alice' <- A scalar
@names[0]; # ('Alice') <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice
$names[1, 2]; # 'Charlie' <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie') <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice
Хоча це й дозволено, заради читабельності краще не давати різним типам змінних одну й ту саму назву.
Масиви та списки багато в чому схожі, і в багатьох місцях їх можна використовувати взаємозамінно, але це не одне й те саме. Список - це фіксована й незмінна колекція скалярів. Масив - це колекція скалярів, у якій можна змінювати і вміст, і сам розмір.
У деяких контекстах вони поводяться по-різному. Масив у скалярному контексті дасть нам розмір цього масиву. Список у скалярному контексті дасть останній елемент списку, а можливо, ще й попередження про те, що решту його вмісту використано в порожньому контексті.
my @names = ('Alice', 'Bob', 'Charlie');
scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).
Докладніше можна прочитати в розділі поширених запитань: Чим список відрізняється від масиву?