Neste espisódio do Tutorial Perl nós iremos aprender sobre arrays em Perl. Esse artigo será um resumo sobre o funcionamento de arrays em Perl. Iremos ver mais adiante maiores detalhes sobre o seu funcionamento.

Em Perl, nomes de variáveis do tipo array iniciam com o símbolo @.

Por conta da nossa insistência no uso do pragma strict você precisa declarar essas variáveis utilizando a palavra-chave my antes do nome da variável.

Lembre-se, todo os exemplos abaixo iniciam da seguinte forma:

use strict;
use warnings;
use 5.010;

Declare um array:

my @names;

Declare e atribua valores:

my @names = ("Foo", "Bar", "Baz");

Depurando arrays

use Data::Dumper qw(Dumper);

my @names = ("Foo", "Bar", "Baz");
say Dumper \@names;

O resultado é:

$VAR1 = [
        'Foo',
        'Bar',
        'Baz'
      ];

Laço foreeach e arrays em perl

my @names = ("Foo", "Bar", "Baz");
foreach my $n (@names) {
  say $n;
}

Irá imprimir:

Foo
Bar
Baz

Acessando um elemento de um array

my @names = ("Foo", "Bar", "Baz");
say $names[0];

NOte que quando acessando um único elemento do array, o símbolo colocado na frente do nome da variável muda de @ para $. Isso pode causar um pouco de confusão em algumas pessoas, mas de você parar para pensar, é algo um tanto quanto óbvio.

O sínbolo @ significa algo no plural e o $ algo no singular. Quando acessando um único elemento de um array, a variável se comporta como uma variável escalar.

Índices de um array

O índice de um array inicia em 0. O maior índice é sempre armazenado em uma variável chamada $#nome_do_array, ou seja:

my @names = ("Foo", "Bar", "Baz");
say $#names;

Irá imrimir 2 porque os índices são 0,1 e 2.

Comprimento ou tamanho de um array

Em Perl não há uma função especial para recuperar o tamanho de um array, mas há várias formas de se obter esse valor. Um delas por exmeplo, é somar 1 ao maior índice do array. No caso acima $#names + 1 é o tamanho ou comprimento do array.

Além disso a função scalar pode ser utilizada para obter o tamanho de um array:

my @names = ("Foo", "Bar", "Baz");
say scalar @names;

Irá imprimir 3.

A função scalar é um tipo de invocação onde - entre outras coisas - realiza a conversão entre arrays e scalars. Por conta de uma decisão arbitrária, porém inteligente, esssa conversão resulta no tamanho do array.

Iterando os índices de um array

Em determinados casos a iteração sobre os valores do array não é o suficiente. Nós poderemos precisar de ambas informações, os valores e os índices. Neste caso nós precisamos iterar sobre os índices e obter os valores utilizando os índices:

my @names = ("Foo", "Bar", "Baz");
foreach my $i (0 .. $#names) {
  say "$i - $names[$i]";
}

imprime:

0 - Foo
1 - Bar
2 - Baz

Função push em arrays

push adiciona um novo valor ao final do array, aumentando o seu tamanho:

my @names = ("Foo", "Bar", "Baz");
push @names, 'Moo';

say Dumper \@names;

Resulta em:

$VAR1 = [
        'Foo',
        'Bar',
        'Baz',
        'Moo'
      ];

Função pop em array

pop remove o último elemento de um array:

my @names = ("Foo", "Bar", "Baz");
my $last_value = pop @names;
say "Last: $last_value";
say Dumper \@names;

Resultando em:

Last: Baz
$VAR1 = [
        'Foo',
        'Bar',
      ];

Função shift em array

shift irá retornar o último elemento à esquerda do array e irá mover todos os demais elementos uma casa à esquerda.

my @names = ("Foo", "Bar", "Baz");

my $first_value = shift @names;
say "First: $first_value";
say Dumper \@names;

O resultado é:

First: Foo
$VAR1 = [
        'Bar',
        'Baz',
      ];