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
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
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
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
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
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
Some parts of this page were machine translated.
Powered by Yandex.Translate
http://translate.yandex.com/