Array
A differenza delle variabili scalari, gli array sono identificati dal prefisso @
, ad esempio @array
.
Come nella maggior parte dei linguaggi gli array sono 0-indexed (cioè indicizzati a partire da zero).
Il singolo elemento di un array (essendo di fatto uno scalare) viene identificato scrivendo $array[$n]
.
Un esempio di definizione di array è il seguente:
@array = ("a", "b", "c", 42, $a) ;
Dove il simbolo $a
rappresenta una variabile scalare definita predentemente.
Perl permette di manipolare gli array molto facilmente. Consideriamo ad esempio il seguente script:
@short = @array[0, 3] ; print "New array: [$short[0], $short[1]]" ;
che estrae gli elementi di posto 0 (primo elemento) e 3 (quarto elemento) e poi li stampa. Il risultato è infatti
New array: [a, 42]
Per concatenare due array possiamo usare la sintassi
@long = (@array, @short) ;
Verifichiamo l'esito dell'operazione stampando il contenuto dell'array risultato
print "\nContenuti dell'array 'long': " ; for $num (@long) { print "$num - " ; }
Che produce
Contenuti dell'array 'long': a - b - c - 42 - - a - 42 -
Se eseguiamo le istruzioni di questa pagina senza valorizzare la variabile $a
troveremo degli "spazi vuoti"
quando stampiamo il contenuto dell'array (come qui sopra): questo perché, come già detto in precedenza, la variabili non definite
sono trattate come il numero 0
(zero) o la stringa vuota.
Nota: abbiamo anticipato la sintassi del ciclo for
, che vedremo meglio nelle prossime lezioni.
Manipolare gli array
Vediamo alcuni esempi di manipolazione degli array. Oltre alle operazioni di estrazione e concatenazione viste sopra possiamo eseguire alcune operazioni in modo molto semplice e sintetico
@chars = @array[0..2] ; @sorted = sort @array ; @reversed = reverse @array ; print "Chars: @chars\n" ; print "Sorted: @sorted\n" ; print "Reversed: @reversed\n" ;
il risultato sarà il seguente
Chars: a b c Sorted: 42 a b c Reversed: 42 c b a
Ancora una volta notiamo la presenza di uno spazio vuoto supplementare (prima del 42), dovuto alla variabile $a
non valorizzata.
Concludiamo elencando alcune sintassi e proprietà degli array:
print "@array"
)\@
)@ARGV
(argomenti passati a linea di comando) e
@_
(argomenti passati ad una subroutine)