Perl/Variabili vettori: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: apostrofo dopo l'articolo indeterminativo e modifiche minori
m Update syntaxhighlight tags - remove use of deprecated <source> tags
Riga 27:
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 !!!
 
Riga 39:
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
Riga 56:
#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.
Riga 62:
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.
Riga 74:
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.
Riga 99:
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.
Riga 115:
#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');
Riga 122:
@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
 
Riga 133:
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 ===
Riga 150:
*''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 )
Riga 156:
$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 ===
Riga 165:
 
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.
Riga 176:
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/.../ ===
Riga 192:
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à:
Riga 214:
'''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 ).
Riga 234:
'''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" );
Riga 246:
, $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.