Como passar de uma matriz em Perl

Tarefa. No código Perl do programa, há uma série de @arr (para as três primeiras letras da palavra "array"). Nessa matriz, tem algum valor. Precisa passear por todos os elementos da matriz e executar as ações de cada elemento.

Ir para a matriz com o foreach

O método recomendado para resolver este problema é usar foreach. Aqui está um exemplo de programa:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

foreach my $el (@arr) {
    warn $el;
}

É tudo muito simples. Há uma matriz. A seguir criamos uma variável $el (abreviação da palavra element). O ciclo de foreach coloca esta variável é o primeiro elemento da matriz (no nosso exemplo, é o número 1). O corpo do loop é executado warn $el; — isso mostra a o valor na tela. O ciclo de foreach coloca na variável $el o seguinte valor a partir de uma matriz, mais uma vez o corpo do loop é executado. Isto é repetido até que o corpo do loop não será executado para todos os elementos da matriz.

Ir para a matriz com o ciclo de for

Esse é o programa-exemplo, como andar de Perl matriz com o ciclo é semelhante ao ciclo na linguagem C:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

for (my $i = 0; $i < @arr; $i++) {
    warn $arr[$i];
}

O que está acontecendo aqui. Há uma matriz @arr. A seguir criamos uma nova variável $i e atribuiu a ela o valor 0 (0 é o índice o primeiro item em Perl matriz). Sobre o corpo do loop é executado warn $arr[$i];. Após isso, a variável $i com o operador de ++ aumenta em um. Em seguida, é executada uma verificação de condição $i < @arr. Se a condição voltou a verdade, então tudo se repete.

Esta solução é um pouco mais complicado do que a solução com a ajuda de foreach. Você precisa trabalhar com cuidado com os valores de limite. Se o errado escrever a verificação, você pode pular o último valor ou entrar em contato com o que não existe elemento para o último elemento da matriz (com esse título retornará undef).

Aqui está um exemplo de um programa que funciona mesmo, mas tem outra condição for:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

for (my $i = 0; $i <= $#arr; $i++) {
    warn $arr[$i];
}

for a matriz tem sentido usar-se-lhe no corpo do laço necessário, não só o valor de um item, mas e o seu número. Mas, neste caso, você pode usar foreach ciclo, manualmente, expondo o valor da variável com o índice:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);
my $i = 0;

foreach my $el (@arr) {
    warn "index: $i value: $el";
    $i++;
}

Tal opção mais fácil é percebido o homem e ele é menos suscetível a bahamas com eles o valor. Mas há mais confortável a oportunidade de dizer a mesma coisa com o each.

De passar através de uma matriz com o while e each

A palavra-chave each é usado não é muito comum, mas quase sempre quando ele é usado, ele é usado para o trabalho com хешом. Малоизвестно, mas each pode ser usado para passar a matriz, ao ganhar o índice do elemento e o elemento em si. Veja como parece o código anterior, escrito com a ajuda de each:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

while (my ($i, $el) = each @arr) {
    warn "index: $i value: $el";
}

each tornou-se possível aplicar a matriz a partir da versão Perl 5.12. Se você executar esse código em mais de uma versão anterior do Perl, então o erro será:

Type of arg 1 to each must be hash (not private array) at script.pl line 5, near "@arr) "
Execution of script.pl aborted due to compilation errors.

Temas relacionados

Outros artigos