Differenze tra le versioni di "Perl/Variabili vettori"

m
wikificato
m (wikificato)
Ogni treno ha un certo numero di vagoni.
Analogamente gli array sono in insieme di scalari.
Come nel treno le carrozze sono numerate , così negli array per identificare una informazione si usa un numero intero.
La numerazione parte da 0 ed arriva fino al numero di elementi - 1.
Cioè la prima carrozza ha il numero 0 (e non 1)
Come per le variabili scalari , per identificare una variabile vettore (più valori in fila) occorre anteporre al nome il carattere @ (sigillo). Il nome di una variabile DEVE iniziare con "lettere", "_" , "'", mentre dal secondo carattere oltre ai precedenti si possono usare i "numeri" fino ad un massimo di 256 caratteri.
NOTA: Essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.
<source lang="perl">
@a; # è il vettore a
@A; # è il vettore A diverso da a
</source>
 
NOTA: il nome di un vettore non può iniziare con numeri !!!
 
 
<source lang="perl">
@a; #Ho definito un array ma non l'ho riempito
@a = (); #Ho definito un array ed è vuoto
 
<source lang="perl">
print "posizione 3 primo array :$a[2]\n";
print "posizione 3 secondo array :$b[2]\n";
Con questa parola intendo la "trasformazione" che il linguaggio opera automaticamente nel trattare nel contesto gli array.
Vediamo questo esempio:
<source lang="perl">
@a = ( 2 , 3 , 4 );
@b = ( 1 , @a , 5 , 6 );
</source>
Nell'esempio trattato, @b ha i valori ( 1 , 2 , 3 , 4 , 5 , 6 ), quindi al posto di @a sono stati inseriti i suoi valori.
Quindi in @a non è stato messo il ''numero'' di elementi di @a '''ma''' gli elementi stessi che costituiscono il vettore.
Se l'elemento x e y sono numeri sono tutti i numeri (incrementati di 1) che intercorrono fra x e y.
Nel caso di stringhe sono tutti i caratteri far una stringa e l'altra: 'a' .. 'f' equivale ad a, b, c, d, e, f.
<source lang="perl">
 
@alfabeto = ('A' .. 'Z');
@giorni_del_mese = ('01' .. '31');
@s[2,3,5] = ( 'PIPPO' , 'pluto' , 'CIAO' );
@k[0 .. 1] = ( 'mario' , 'giuseppe' );
</source>
 
in @alfabeto ci saranno tutte le lettere dalla A alla Z
 
in @k contiene ( 'mario' , 'giuseppe' )
NOTA: in quest'ultimo assegnamento lo si poteva ottenere anche con il seguente codice:
<source lang="perl">
 
@k = ( 'mario' , 'giuseppe' );
</source>
 
=== Funzioni per immettere informazioni nei vettori===
Le funzioni sono push, pop, shift e unshift.
 
*''push'' e ''pop '' lavorano sulla "coda del treno".
*''shift'' e ''unshift'' lavorano sulla "testa del treno".
 
*''push '' mette le informazioni in fondo
*''pop '' estrae le informazioni dal fondo
*''shift '' estrae le informazioni dalla testa
*''unshift'' mette le informazioni dalla testa
 
<source lang="perl">
@a = ( 2 , 3, 4, 5 );
push ( @a , 6 , 7 ); #ora @a contiene ( 2 , 3, 4, 5 , 6 , 7 )
$c = shift ( @a ); # $c = 2 , @a contiene ( 3, 4, 5 , 6 )
unshift( @a , 0 , 1, 2); # ora @a contiene ( 0 , 1, 2 , 3, 4, 5 , 6 )
</source>
 
===Da array a stringa e viceversa ===
 
In particolare join "unisce" i valori dell'array mettendo fra loro la stringa indicata dall'utente:
<source lang="perl">
@a = ( 1 , 2, 3 );
print join("_" , @a); # scrive 1_2_3
print "\n";
</source>
 
'''NOTA''': se l'array passato non ha elementi torna una stringa vuota.
Semplificando si può dire che accetta una stringa che risulta essere il separatore.
Limitando l'esempio a strighe statiche :
<source lang="perl">
 
@a = split ( " " , "questo testo verrà diviso in ogni parola" );
print @a."\n";
</source>
 
quindi in @a avremo ( "questo" , "testo" , "verrà" , "diviso" , "in" , "ogni" , "parola" )
per fare l'operazione contraria basterà scrivere:
<source lang="perl">
$a = join( " " , @a );
</source>
 
===delete===
Questa funzione consente di cancellare un dato da un array.Tuttavia, se non è all'ultima posizione , non riduce la dimensione dell'array.
<source lang="perl">
@p = split ( " " , "questo testo verrà diviso in ogni parola" );
$c = delete ( $p[3] );
print "$c , ".join("_" , @p)."\n";
</source>
 
che mostrerà:
diviso , questo_testo_verrà__in_ogni_parola
 
'''NOTA''': da notare lo "__" fra la parola "verrà" e la parola "in" : in quel punto c'è un elemento undef e quindi vengono aggiunti 2 "_" (uno per il valore "undef" e uno per il valore "in")
 
 
=== Dopo tanta teoria un po' di pratica ===
'''ESEMPIO1'''
Assegnare ad un vettore i numeri da 1 a 12.
<source lang="perl">
 
@numeri = ( 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 );
</source>
 
'''ESEMPIO2'''
Assegnare ad un altro vettore i nomi dei mesi usando la funzione split.
<source lang="perl">
 
@mesi = split ( " " , 'gennaio febbraio marzo aprle maggio giugno luglio agosto settembre ottobre novembre dicembre" );
</source>
 
'''ESEMPIO3'''
Scrivere il dato corrispondente alla terza posizione del vettore precedente.
<source lang="perl">
 
print $mesi[2]."\n";
</source>
 
'''nota:''' il terzo mese ha le informazioni alla posizione 2 nel vettore (si parte da 0 a contare: 0 1 2 ).
Dati due array : uno con numerazione da 1 a 12, l'altro con il nome dei mesi,
scrivere i dati relativi al mese numero 3 nella seguente forma:"il mese " il numero del mese seguito da "ha il nome :" il relativo nome.
<source lang="perl">
 
@numeri = ( 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 );
@mesi = split ( " " , 'gennaio febbraio marzo aprle maggio giugno luglio agosto settembre ottobre novembre dicembre" );
, $mesi[$meseDaScrivere -1] # nome del mese
)."\n";
</source>
 
'''nota:''' si è usato "$meseDaScrivere -1" perchè il vettore iniziando a contare da 0, il mese 3 ha le informazioni alla posizione 2 nel vettore.
 
# si ottengono/assegnano i dati (scalari) utilizzando la sintassi $'nome'['posizione']
# si utilizzano le funzioni pop, push, shift, unshift per mettere togliere elementi
# si utilizzano le funzioni join , split per "passare" da stringa a vettore e viceversa
[[Categoria:Perl|Vettori]]