Trilhas
/
Perl
Perl
/
Programa
/
Arrays e listas
Ar

Arrays e listas em Perl

1 exercício

Sobre Arrays e listas

Arrays e listas contêm uma coleção ordenada de escalares. Fora o uso de referências (que serão abordadas em um conceito separado), isso significa que arrays e listas são sempre planos, ou seja, não podem conter outros arrays ou listas.

Na maioria dos casos, as listas vêm entre parênteses () com seus elementos separados por vírgulas ,.

Uma variável de array geralmente é preenchida atribuindo uma lista a ela, por exemplo, my @names = ('Alice', 'Bob', 'Charlie');.

Os elementos de um array ou de uma lista podem ser acessados especificando índices por meio de um subscrito, por exemplo, ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.

Os índices em Perl começam em 0. Índices negativos contam a partir do fim do array ou da lista, por exemplo, ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.

Funções

Há muitas funções implementadas para operar sobre arrays e listas; algumas das mais úteis são grep para uma nova lista de elementos filtrados que atendem a uma condição, map para transformar elementos em uma nova lista de valores, e sort para uma nova lista de elementos reordenados.

Entre as funções para manipular arrays estão push para adicionar elementos ao final, pop para remover o último elemento, shift para remover o primeiro elemento, unshift para adicionar elementos ao início, e splice para modificações mais complexas.

Iterar sobre arrays e listas com uma instrução for(each) também é algo que você vai encontrar com frequência.

Variação de sigilos

Ao acessar os elementos de um array, o sigilo usado determina o resultado. É o subscrito [] no final do nome da variável que diz ao Perl que você está acessando um 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 não ter tipos diferentes de variáveis compartilhando o mesmo nome, por uma questão de legibilidade.

Arrays vs Listas

Arrays e listas compartilham muitas semelhanças e, em muitos lugares, 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 é uma coleção variável de escalares, em que o conteúdo e o tamanho do próprio array podem ser alterados.

Eles têm comportamentos diferentes em alguns contextos. Um array usado em contexto escalar fornece o tamanho do array. Uma lista usada em contexto escalar fornece o último elemento da lista e, possivelmente, alguns avisos sobre o restante do conteúdo dela estar sendo usado em contexto void.

my @names = ('Alice', 'Bob', 'Charlie');

scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).

Leia mais na seguinte FAQ: Qual é a diferença entre uma lista e um array?

Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Arrays e listas

A prática está bloqueada

Desbloqueie mais 10 exercícios para praticar Arrays e listas