Perl/Variabili vettori: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
m ha spostato Linguaggio Perl/Le variabili:vettori a Linguaggio Perl/Le variabili/Vettori: sottopaginazione più corretta
sintassi codice colorata
Riga 12: Riga 12:
Come per le scalari i nomi degli array possono essere composti da lettere, numeri, "_" , "'" e d avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.
Come per le scalari i nomi degli array possono essere composti da lettere, numeri, "_" , "'" e d avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.


===IL CONTENUTO===
===Il contenuto===


Il contenuto è un qualsiasi scalare.
Il contenuto è un qualsiasi scalare.
Riga 18: Riga 18:
Vediamo la sintassi per creare un array:
Vediamo la sintassi per creare un array:


<source lang="perl">
@a; #Ho definito un array ma non l'ho riempito
@a; #Ho definito un array ma non l'ho riempito
@a = (); #Ho definito un array ed è vuoto
@a = (); #Ho definito un array ed è vuoto
Riga 34: Riga 36:
#Ho definito un array ed è riempito con 7 valori di stringhe
#Ho definito un array ed è riempito con 7 valori di stringhe
# che occupano le posizioni da 0 a 6 !
# che occupano le posizioni da 0 a 6 !
</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.
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.
Nel nostro caso la sintassi prevede l'uso delle parantesi quadre come identificatore dell'indice.
Nel nostro caso la sintassi prevede l'uso delle parantesi quadre come identificatore dell'indice.
Vediamo ora se volessi scrivere il terzo valore dell'array (è alla posizione 2 perché si conta da 0):
Vediamo ora se volessi scrivere il terzo valore dell'array (è alla posizione 2 perché si conta da 0):


<source lang="perl">
print "posizione 3 primo array :$a[2]\n";
print "posizione 3 primo array :$a[2]\n";
print "posizione 3 secondo array :$b[2]\n";
print "posizione 3 secondo array :$b[2]\n";
print "posizione 3 terzo array :$c[2]\n";
print "posizione 3 terzo array :$c[2]\n";
</source>

questo scriverà : 3 per il primo array, 1 per il secondo array, mercoledì per il terzo array.
questo scriverà : 3 per il primo array, 1 per il secondo array, mercoledì per il terzo array.


Riga 49: Riga 55:
Il Perl ha adottato la particolarità del contesto per sapere di quanti elementi è composto un array:
Il Perl ha adottato la particolarità del contesto per sapere di quanti elementi è composto un array:


<source lang="perl">
$numero_elementi = @a;
$numero_elementi = @a;
print "numero di elementi di primo array e' : $numero_elementi\n";
print "numero di elementi di primo array e' : $numero_elementi\n";
</source>

Tuttavia esiste una sintassi specifica per sapere il valore dell'ultimo indice o per "forzare" la quantità di elementi di un array:
Tuttavia esiste una sintassi specifica per sapere il valore dell'ultimo indice o per "forzare" la quantità di elementi di un array:


<source lang="perl">
$numero_elementi = $#a;
$numero_elementi = $#a;
print "numero di elementi di primo array e' : $numero_elementi\n";
print "numero di elementi di primo array e' : $numero_elementi\n";
</source>

Mentre se si usa l'istruzione:
Mentre se si usa l'istruzione:


<source lang="perl">
$#a = 10;
$#a = 10;

</source>
Ora @a ha ben 10 elementi.
Ora @a ha ben 10 elementi.



Versione delle 22:17, 25 giu 2007

Template:Linguaggio Perl

I vettori o array si possono immaginare come un treno.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)

treno - vagoni  : 1 2 3 4 5 ... 100

array - scalari : 0 1 2 3 4 ... 99

I NOMI

Come per le scalari i nomi degli array possono essere composti da lettere, numeri, "_" , "'" e d avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.

Il contenuto

Il contenuto è un qualsiasi scalare.

Vediamo la sintassi per creare un array:

  
 @a;           #Ho definito un array ma non l'ho riempito
 @a = ();      #Ho definito un array ed è vuoto
 # PRIMO ARRAY
 @a = ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 );
               #Ho definito un array ed è riempito con  9 valori da 1 a 9 
               #     che occupano le posizioni da 0 a 8 ! 
 # SECONDO ARRAY
 @b = ( 4 , "pippo" , 1 , "pluto" , 2 , "paperino" , 3 , "minni" , 4 );
               #Ho definito un array ed è riempito con  9 valori fra stringhe e numeri 
               #     che occupano le posizioni da 0 a 8 ! 
 # TERZO ARRAY
 $lun = "lunedì";
 $mar = "martedì"
 @c = ( $lun , $mar , "mercoledì" , "giovedì" , "venerdì" , "sabato" , "domenica" );
               #Ho definito un array ed è riempito con  7 valori di stringhe 
               #     che occupano le posizioni da 0 a 6 !

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. Nel nostro caso la sintassi prevede l'uso delle parantesi quadre come identificatore dell'indice. Vediamo ora se volessi scrivere il terzo valore dell'array (è alla posizione 2 perché si conta da 0):

  
 print "posizione 3 primo array :$a[2]\n"; 
 print "posizione 3 secondo array :$b[2]\n"; 
 print "posizione 3 terzo array :$c[2]\n";

questo scriverà : 3 per il primo array, 1 per il secondo array, mercoledì per il terzo array.

Notate che la gestione dei simboli è corretta: se intendo gestire l'array nella sua "totalità" uso il simbolo @ mentre se ne voglio uno scalare allora uso $ il nome e l'identificatore della posizione racchiuso fra parentesi quadre.

Il Perl ha adottato la particolarità del contesto per sapere di quanti elementi è composto un array:

   $numero_elementi = @a;
 print "numero di elementi di primo array e' : $numero_elementi\n";

Tuttavia esiste una sintassi specifica per sapere il valore dell'ultimo indice o per "forzare" la quantità di elementi di un array:

   $numero_elementi = $#a;
 print "numero di elementi di primo array e' : $numero_elementi\n";

Mentre se si usa l'istruzione:

   $#a = 10;

Ora @a ha ben 10 elementi.

NOTA se l'array ha un numero inferiore di elementi rispetto a quelli presenti , gli elementi che sono stati "aggiunti" hanno valore undef.

Linerizzazione

Con questa parola intendo la "trasformazione" che il linguaggio opera automaticamente nel trattare nel contesto gli array. Vediamo questo esempio:

@a = ( 2 , 3 , 4 );
@b = ( 1 , @a , 5 , 6 );

Nell'esempio trattato @b ha i valori ( 1 , 2 , 3 , 4 , 5 , 6 ) quindi al posto si @a ne sono stati messi i valori. Quindi a @a non è stato messo il numero di elementi di @a ma gli elementi stessi che costituiscono il vettore. Questo che può apparire strano in realtà è molto utile per "sommare" elementi e giuntarli. Se si volesse mettere un array è necessario mettere un reference (e quindi uno scalare cioè lo scalare che punta alle informazioni di "tipo" array). Se si volesse mettere il numero di elementi di un array è obbligatorio usare $#a.

Notazione [ x , y , z ] e [ x .. y ]

In Perl esiste la possibilità di estrarre o trattare contemporaneamente più informazioni da un array. Questo è possibile perché è possibile identificare sintatticamente più informazioni.

  1. nel caso della notazione [ x , y , z ] si indicano gli elementi alla posizione x,y,z (nell'esempio 3 ma possono essere di più o di meno!).
  2. nel caso della notazione [ x .. y ] si indicano tutti gli elementi che vanno all'elemento x a y.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 a a, b, c, d, e, f.
@alfabeto = ('A' .. 'Z');
@giorni_del_mese = ('01' .. '31');
@ACD = @alfabeto[0 , 2 ,3 ];
@s = ();
@s[2,3,5] = ( 'PIPPO' , 'pluto' , 'CIAO' );
@k[0 .. 1] = ( 'mario' , 'giuseppe' );

in @alfabeto ci saranno tutte le lettere dalla A alla Z

in giorni del mese ci saranno tutti i numeri da 01 a 31 (compreso 05, 11 , 21 etc)

in @ACD contiene ( 'A' , 'C' , 'D' )

in @s contiene ( undef , undef , 'PIPPO' , 'pluto' , undef , 'CIAO' )

in @k contiene ( 'mario' , 'giuseppe' )


ecco che inizia a delinearsi la possibilità di utilizzare in modo flessibile le informazioni senza dover utilizzare dei "cicli" per inserire dei valori.

push , pop , shift , unshift

Queste funzioni consentono l'inserimento di valori in un array. Push e pop lavorano sulla "coda del treno" mentre shift e unshift lavorano sulla "testa".

@a = ( 2 , 3, 4, 5 );
push ( @a , 6 , 7 );     #ora @a contiene ( 2 , 3, 4, 5 , 6 , 7 ) 
$b = pop (@a);           # $b = 7 ,  @a contiene ( 2 , 3, 4, 5 , 6 )
$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 )

join e split

Queste due funzioni consentono:

  • di aggregare array in stringhe (join)
  • di separare una stringa in array

In particolare join "unisce" i valori dell'array mettendo fra loro la stringa indicata dall'utente:

@a = ( 1 , 2, 3 );
print join("_" , @a); # scrive 1_2_3
print "\n";

NOTA: se l'array passato non ha elementi torna una stringa vuota.

Per split il discorso è più articolato in quanto come elemento separatore accetta una espressione regolare che al momento è prematuro introdurre.Semplificando si può dire che accetta una stringa che risulta essere il separatore. Limitando l'esempio a strighe statiche :

@a = split ( " " , "questo testo verrà diviso in ogni parola" );
print @a."\n";

quindi in @a avremo ( "questo" , "testo" , "verrà" , "diviso" , "in" , "ogni" , "parola" ) per fare l'operazione contraria basterà scrivere:

$a = join( " " , @a );

delete

Questa funzione consente di cancellare un dato da un array.Tuttavia, se non è all'ultima posizione , non riduce la dimensione dell'array.

@p = split ( " " , "questo testo verrà diviso in ogni parola" );
$c = delete ( $p[3] );
print "$c , @p\n";

che mostrerà:

diviso , questo testo verrà  in ogni parola

NOTA: da notare lo spazio fra la parola verrà e la parola in : in quel punto c'è un elemento undef e quindi vengono aggiunti 2 spazi (uno per undef e uno per la parola in)