Hvordan til at passere array i Perl

Opgave. I koden for Perl-programmet har en bred vifte @arr (de tre første bogstaver fra ordet "array"). I dette array har nogle værdier. Du er nødt til at gå gennem alle array-elementer og udføre en handling med hvert element.

Gå gennem array ved hjælp af foreach

Den anbefalede måde at løse dette problem er at bruge foreach. Her er en prøve på programmet:

▶ Run
#!/usr/bin/perl

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

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

Det hele er meget simpelt. Der er en bred vifte. Næste vi opretter en variabel $el (en forkortelse af ordet element). Cyklus foreach steder i denne variabel, er det første element i array (i vores eksempel, dette nummer er 1). Udfører loop kroppen warn $el; — dette bringer værdien på skærmen. Cyklus foreach sætter i variabel $el den næste værdi fra et array igen, udfører loop kroppen. Dette gentages, indtil løkken krop er ikke udført for alle array-elementer.

Gå gennem array ved hjælp af en løkke for

Her er en prøve på programmet, hvordan det at gå på et Perl-array ved hjælp af en løkke, der svarer til loop i C-sprog:

▶ Run
#!/usr/bin/perl

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

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

What ' s going on. Der er en bred vifte @arr. Så har vi oprettet en ny variabel $i og tildelt den værdien 0 (0 er indekset det første element i et Perl-array). Derefter udføres løkken krop warn $arr[$i];. Efter, at den variable $imed operatøren ++ er steget med én. Det så kontrollerer betingelser $i < @arr. Hvis den betingelse, der returneres true, så alle gentagelser.

Denne løsning er noget mere kompliceret, end den løsning, ved hjælp af foreach. Du er nødt til nøje at arbejde med grænse-værdier. Hvis det er forkert for at skrive en check, kan du enten springe den sidste værdi eller for at få adgang til en ikke-eksisterende element ud over den sidste element i array (denne behandling vil vende tilbage undef).

Her er et eksempel program, der fungerer på samme måde, men bruger en anden betingelse for:

▶ Run
#!/usr/bin/perl

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

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

for array det giver mening at bruge, hvis du er i the loop kroppen bør ikke kun værdien af det element, og dets nummer. Men i dette tilfælde du kan bruge foreach cyklus, manuelt at udsætte den variabel med det indeks:

▶ Run
#!/usr/bin/perl

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

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

Denne mulighed er nemmere opfattes af den person, og det er mindre modtagelige til Bahamas med grænseværdien. Men der er en mere bekvem måde at sige det samme med each.

Gå gennem array ved hjælp af while og each

Søgeord each er ikke brugt særlig ofte, men næsten altid, når det bruges det bruges til at arbejde med Hesham. Lidt kendt, men each kan bruges til at gå gennem array, med indeks på element, og det element i sig selv. Her er den forrige kode skrevet med each:

▶ Run
#!/usr/bin/perl

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

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

each kan anvendes til arrays fra Perl 5.12. Hvis du køre denne kode på mere tidligere versioner af Perl, vil det fejl:

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.

Relaterede emner

Andre artikler