Come fare riferimento a un elemento di un array in Perl

Il compito. In Perl programma ha una matrice. Leggere il valore di uno degli elementi di tale matrice.

Ecco un esempio di come fare:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print $arr[1];

Se si salva il testo di questo programma in un file script.pl ed eseguire perl script.pl, sullo schermo apparirà il testo two.

Allora, che cosa sta succedendo qui.

Innanzitutto abbiamo creato un array con il nome @arr. Una variabile array inizia con il carattere @, questo simbolo è simile al primo lettera dalla parola "array". Abbiamo creato un array e messo in esso di 3 elementi. Nel nostro esempio, tutti e 3 gli elementi è le righe, ma in generale in un array possono essere elementi completamente diversi tipi, ad esempio, stringhe, numeri e link.

Ogni elemento dell'array è un numero di sequenza. Questo numero si chiama "indice". In un linguaggio di programmazione Perl, come in molti altri linguaggi di programmazione elementi di un array iniziano numerati con il numero 0. Nell'esempio in un array contiene 3 elementi:

  • stringa 'one' — questo è un elemento di un array con un indice di 0
  • stringa 'two' — questo è un elemento di un array con un indice di 1
  • stringa 'three' è un elemento di un array con un indice di 2

Per fare riferimento a un elemento di un array con un indice di 1 bisogno di scrivere $arr[1]. Scriviamo il nome della matrice e in piazza tra parentesi scriviamo l'indice di un elemento che dobbiamo ottenere. Si prega di notare una caratteristica. Quando ci rivolgiamo a un singolo elemento di un array, invece di carattere @ in nome di un array è necessario scrivere il simbolo $ (simbolo del dollaro, simbolo simile alla prima una lettera della parola "scalar"). L'idea era che con tale registrazione, abbiamo chiaramente sottolineare che abbiamo bisogno di ottenere un valore, ma, a mio parere, questo è un errore nella progettazione lingua. Questo non ha semplificato, ma al contrario ha reso tutto più difficile. In un linguaggio di programmazione Perl6 è risolto, ma in Perl5 quando si accede a un elemento di un array è necessario utilizzare il simbolo del dollaro $: $arr[1].

Fare riferimento all'ultimo elemento dell'array

Quando si crea un array @arr appare automaticamente la variabile $#arr che contiene l'indice dell'ultimo elemento. Quando l'aggiunta/rimozione di elementi di un array di valori di questa variabile cambia automaticamente (e anche si può più registrare il numero di questa variabile).

Per accedere all'ultimo elemento dell'array è possibile utilizzare la voce $arr[$#arr]. Ma è più comodo utilizzare $arr[-1]. L'indice -1 indica l'indice dell'ultimo elemento dell'array, l'indice -2 — penultimo e così via.

Modo sbagliato

Ecco un esempio di codice (delicatamente, questo contiene un errore):

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print @arr[1]; # error

Questa opzione allo stesso modo, come e giusto, ma invece corretto di accedere a un elemento di un array utilizzando $arr[1]qui viene utilizzato @arr[1].

Se si salva il testo di questo programma in un file script.pl e di eseguire il suo perl script.pl, lo schermo sarà di testo two. Stringa 'two', è davvero l'elemento con indice 1 nella matrice @arr, in modo che a prima vista gli errori non si vedono.

Ma se aggiungere al codice la stringa use warnings; (che è quasi sempre la pena di fare), allora l'output del programma sarà visto l'avviso:

Scalar value @arr[1] better written as $arr[1] at script.pl line 7.
two

Modulo di registrazione @arr[ ] — è quello di ottenere più valori di un array. Si chiama "taglio". Alcuni esempi:

  • @arr[1,2] — restituisce una lista di due elementi, gli elementi di un array con gli indici 1 e 2
  • @arr[0..2] — restituisce una lista di tre elementi, gli elementi di un array con gli indici 0, 1 e 2
  • @arr[1, 1] — restituisce una lista di due elementi, ripete l'elemento con indice 1 due volte

Registrazione @arr[1] — restituisce una lista di un solo elemento, oltre a emettere un avviso.

Registrazione @arr[1,] — restituisce una lista di un elemento senza avvisare.

Se avete bisogno di un valore di un elemento di un array, è meglio scrivere $arr[1].

Temi correlati

Altri articoli