Differenze tra le versioni di "Perl/Variabili vettori"

m
Update syntaxhighlight tags - remove use of deprecated <source> tags
m (Bot: apostrofo dopo l'articolo indeterminativo e modifiche minori)
m (Update syntaxhighlight tags - remove use of deprecated <source> tags)
 
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.
<sourcesyntaxhighlight lang="perl">
@a; # è il vettore a
@A; # è il vettore A diverso da a
</syntaxhighlight>
</source>
NOTA: il nome di un vettore non può iniziare con numeri !!!
 
Vediamo la sintassi per creare un array:
 
<sourcesyntaxhighlight lang="perl">
@a; #Ho definito un array ma non l'ho riempito
@a = (); #Ho definito un array ed è vuoto
#Ho definito un array ed è riempito con 7 valori di stringhe
# che occupano le posizioni da 0 a 6 !
</syntaxhighlight>
</source>
 
Per poter usare i valori dell'array occorre poter selezionare il dato singolo. Per far questo si utilizza il metodo dell'indice. L'indice rappresenta la posizione del dato.
Vediamo ora se volessi scrivere il terzo valore dell'array (è alla posizione 2 perché si conta da 0):
 
<sourcesyntaxhighlight lang="perl">
print "posizione 3 primo array :$a[2]\n";
print "posizione 3 secondo array :$b[2]\n";
print "posizione 3 terzo array :$c[2]\n";
</syntaxhighlight>
</source>
 
questo scriverà : 3 per il primo array, 1 per il secondo array, mercoledì per il terzo array.
Il Perl ha adottato la particolarità del contesto per sapere di quanti elementi è composto un array:
 
<sourcesyntaxhighlight lang="perl">
$numero_elementi = @a;
print "numero di elementi di primo array e' : $numero_elementi\n";
</syntaxhighlight>
</source>
 
Tuttavia esiste una sintassi specifica per sapere il valore dell'ultimo indice o per "forzare" la quantità di elementi di un array:
 
<sourcesyntaxhighlight lang="perl">
$numero_elementi = $#a;
print "numero di elementi di primo array e' : $numero_elementi\n";
</syntaxhighlight>
</source>
 
Mentre se si usa l'istruzione:
 
<sourcesyntaxhighlight lang="perl">
$#a = 10;
</syntaxhighlight>
</source>
 
Ora @a ha ben 10 elementi, di scalari di valore undef.
Con questa parola intendo la "trasformazione" che il linguaggio opera automaticamente nel trattare nel contesto gli array.
Vediamo questo esempio:
<sourcesyntaxhighlight lang="perl">
@a = ( 2 , 3 , 4 );
@b = ( 1 , @a , 5 , 6 );
</syntaxhighlight>
</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.
#nel caso della notazione [ x .. y ] si indicano tutti gli elementi che vanno dall'elemento x a quello y.
Se gli elementi x e y sono numeri, la notazione indica tutti i numeri (distanziati da un'unità) che intercorrono fra x e y. Invece, nel caso di lettere (stringhe) sono tutti i caratteri fra la prima lettera (stringa) e l'altra: 'a' .. 'f' equivale ad a, b, c, d, e, f.
<sourcesyntaxhighlight lang="perl">
@alfabeto = ('A' .. 'Z');
@giorni_del_mese = ('01' .. '31');
@s[2,3,5] = ( 'PIPPO' , 'pluto' , 'CIAO' );
@k[0 .. 1] = ( 'mario' , 'giuseppe' );
</syntaxhighlight>
</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:
<sourcesyntaxhighlight lang="perl">
@k = ( 'mario' , 'giuseppe' );
</syntaxhighlight>
</source>
 
=== Funzioni per immettere informazioni nei vettori ===
*''unshift'' mette le informazioni dalla testa
 
<sourcesyntaxhighlight 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 )
</syntaxhighlight>
</source>
 
=== Da array a stringa e viceversa ===
 
In particolare join "unisce" i valori dell'array mettendo fra loro la stringa indicata dall'utente:
<sourcesyntaxhighlight lang="perl">
@a = ( 1 , 2, 3 );
print join("_" , @a); # scrive 1_2_3
print "\n";
</syntaxhighlight>
</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 :
<sourcesyntaxhighlight lang="perl">
@a = split ( " " , "questo testo verrà diviso in ogni parola" );
print @a."\n";
</syntaxhighlight>
</source>
 
quindi in @a avremo ( "questo" , "testo" , "verrà" , "diviso" , "in" , "ogni" , "parola" )
per fare l'operazione contraria basterà scrivere:
<sourcesyntaxhighlight lang="perl">
$a = join( " " , @a );
</syntaxhighlight>
</source>
 
=== Uso di qw/.../ ===
Esempio:
 
<sourcesyntaxhighlight lang="perl">
@a = qw( ma che bella questa funzione ); #@a conterrà "ma","che","bella,"questa","funzione"
</syntaxhighlight>
</source>
 
===delete===
Questa funzione consente di cancellare un dato da un array.Tuttavia, se non è all'ultima posizione, non riduce la dimensione dell'array.
<sourcesyntaxhighlight lang="perl">
@p = split ( " " , "questo testo verrà diviso in ogni parola" );
$c = delete ( $p[3] );
print "$c , ".join("_" , @p)."\n";
</syntaxhighlight>
</source>
 
che mostrerà:
'''ESEMPIO1'''
Assegnare ad un vettore i numeri da 1 a 12.
<sourcesyntaxhighlight lang="perl">
@numeri = ( 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 );
</syntaxhighlight>
</source>
 
'''ESEMPIO2'''
Assegnare ad un altro vettore i nomi dei mesi usando la funzione split.
<sourcesyntaxhighlight lang="perl">
@mesi = split ( " " , 'gennaio febbraio marzo aprile maggio giugno luglio agosto settembre ottobre novembre dicembre" );
</syntaxhighlight>
</source>
 
'''ESEMPIO3'''
Scrivere il dato corrispondente alla terza posizione del vettore precedente.
<sourcesyntaxhighlight lang="perl">
print $mesi[2]."\n";
</syntaxhighlight>
</source>
 
'''nota:''' il terzo mese ha le informazioni alla posizione 2 nel vettore (si parte da 0 a contare: 0 1 2 ).
'''ESEMPIO4'''
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 " + numero del mese + "ha il nome: " + il relativo nome.
<sourcesyntaxhighlight 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";
</syntaxhighlight>
</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.
266

contributi