Come passare la matrice in Perl

Il compito. Nel codice Perl programma un array di @arr (le prime tre lettere della parola "array"). In questa matrice ci sono i valori. Bisogno di andare su tutti gli elementi dell'array e le azioni che con ogni elemento.

Camminare su un array con l'aiuto di foreach

Il metodo consigliato per risolvere questo problema è quello di utilizzare foreach. Ecco un esempio di programma:

▶ Run
#!/usr/bin/perl

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

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

Qui tutto è molto semplice. Un array. Poi creiamo una variabile $el (abbreviazione di element). Il ciclo foreach pone a questa variabile il primo elemento della matrice (nel nostro esempio è il numero 1). Viene eseguito il corpo del ciclo warn $el; — uscite il valore sullo schermo. Ciclo foreach mette in una variabile $el il seguente valore di un array, anche in questo caso viene eseguito il corpo del ciclo. Questo si ripete fino a quando il corpo del ciclo non viene eseguito per tutti gli elementi della matrice.

Camminare su un array con un ciclo for

Ecco il programma di esempio, come camminare su Perl array con un ciclo simile a un ciclo in linguaggio c:

▶ Run
#!/usr/bin/perl

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

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

Che sta succedendo. Un array @arr. Poi abbiamo creato una nuova variabile $i assegnato il valore 0 (0 — questo è l'indice il primo elemento in Perl matrice). Poi viene eseguito il corpo del ciclo warn $arr[$i];. Dopo questa variabile $i con l'aiuto di operatore ++ aumenta di uno. Dopo di che verifica le condizioni di $i < @arr. Se la condizione è tornata la verità, allora tutto si ripete.

È una soluzione un po ' più complicato rispetto alla soluzione con l'aiuto di foreach. Delicatamente lavorare con valori limite. Se correttamente scrivere un assegno, è possibile saltare l'ultimo valore o rivolgersi a un elemento dopo l'ultimo elemento dell'array (tale trattamento restituirà undef).

Ecco un esempio di un programma che funziona nello stesso modo, ma si utilizza un'altra circostanza for:

▶ Run
#!/usr/bin/perl

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

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

for la matrice ha senso utilizzare se nel corpo del ciclo è necessario non solo per il valore di un elemento, ma anche il suo numero. Ma anche in questo caso è possibile utilizzare foreach ciclo manualmente esponendo il valore di una variabile con l'indice:

▶ Run
#!/usr/bin/perl

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

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

Così l'opzione più semplice è percepita da una persona e meno soggetto a delle bahamas con un valore limite. Ma c'è più comoda la possibilità di dire la stessa cosa con l'aiuto di each.

Passare la matrice con l'aiuto di while e each

La parola chiave each usato non molto spesso, ma quasi sempre quando viene utilizzato, esso viene utilizzato per lavorare con хешом. Non è conosciuta, ma each può essere usato per passare la matrice, ottenendo l'indice di un elemento e l'elemento stesso. Ecco come appare il codice precedente, scritto con l'aiuto each:

▶ Run
#!/usr/bin/perl

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

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

each è possibile applicare alla matrice a partire dalla versione di Perl 5.12. Se si esegue questo codice in più una prima versione di Perl, quello è un errore:

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.

Temi correlati

Altri articoli