Os arrays e as listas contêm uma coleção ordenada de escalares. A não ser que uses referências (que serão abordadas num conceito à parte), isto significa que os arrays e as listas são sempre planos, ou seja, não podem conter outros arrays ou listas.
Na maioria dos casos, as listas são envolvidas por parênteses () e os seus elementos são separados por vírgulas ,.
Normalmente, uma variável de array é preenchida atribuindo-lhe uma lista, por exemplo, my @names = ('Alice', 'Bob', 'Charlie');.
Podes aceder aos elementos de um array ou de uma lista especificando índices através de um subscrito, por exemplo, ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.
Em Perl, os índices começam em 0.
Os índices negativos contam a partir do fim do array ou da lista, por exemplo, ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.
Há muitas funções implementadas para operar sobre arrays e listas. Algumas das mais úteis são grep, para obter uma nova lista de elementos filtrados que satisfazem uma condição, map, para transformar elementos numa nova lista de valores, e sort, para obter uma nova lista de elementos reordenados.
Entre as funções para manipular arrays estão push para acrescentar elementos ao fim, pop para remover o último elemento, shift para remover o primeiro elemento, unshift para acrescentar elementos ao início, e splice para modificações mais complexas.
Também vais encontrar muitas vezes a iteração sobre arrays e listas com uma instrução for(each).
Quando acedes aos elementos de um array, é o sigil usado que determina o resultado.
É o subscrito [] no fim do nome da variável que diz ao Perl que estás a aceder ao array com esse nome.
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
Embora seja permitido, recomenda-se que variáveis de tipos diferentes não partilhem o mesmo nome, por uma questão de legibilidade.
Os arrays e as listas têm muitas semelhanças e, em muitos contextos, podem ser usados de forma intercambiável, mas não são a mesma coisa. Uma lista é uma coleção fixa e imutável de escalares. Um array (vetor) é uma coleção variável de escalares, em que tanto o conteúdo como o tamanho do próprio array podem ser alterados.
Têm comportamentos diferentes em alguns contextos. Um array usado em contexto escalar dá-te o tamanho do array. Uma lista usada em contexto escalar dá-te o último elemento da lista e, possivelmente, alguns avisos sobre o resto do seu conteúdo ser usado em contexto void.
my @names = ('Alice', 'Bob', 'Charlie');
scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).
Lê mais nas seguintes perguntas frequentes: Qual é a diferença entre uma lista e um array?