|
|
Variabili scalari ed
array |
|
In Perl, a differenza di quanto accade con altri
linguaggi di programmazione, non è necessario dichiarare le variabili
prima di utilizzarle; il simbolo ``$'' che le precede sta ad indicare
che si tratta di variabili che possono accettare un unico valore, che
potrà essere un numero, un singolo carattere o una stringa. Chiameremo
questo tipo di variabili scalari, per distinguerle da altri tipi più
complessi (variabili vettoriali).
L'interprete Perl, utilizzando le variabili nelle istruzioni del
nostro programma, stabilirà dal contesto se queste devono essere
utilizzate come variabili numeriche o come stringhe.
| $nome='Marco'; |
stringa |
| $n = 3; |
numero intero |
| $x = 3.1415; |
numero razionale |
| $saluto = "Ciao $nome\n"; |
stringa con interpolazione |
| $giorno = 'date'; |
comando |
Tipi di dato
Un array è una struttura dati che permette di accedere ad un set di
variabili scalari direttamente attraverso un indice numerico; potremmo
dire, in altri termini, che si tratta di una variabile a più
componenti.
I nomi degli array in Perl sono preceduti dal simbolo ``@'' per
distinguerli dalle variabili scalari. Le singole componenti del
vettore (array) sono delle variabili scalari. Ad esempio l'istruzione
@frutta = ('mele', 'pere', 'banane', 'uva');
definisce l'array @frutta come un vettore a quattro componenti; per
accedere alla singola componente si deve usare un indice numerico,
come nel seguente esempio:
#!/usr/local/bin/perl
# script "frutta.pl"
@frutta = ('mele', 'pere', 'banane', 'uva');
print "un cesto pieno di $frutta[1].\n";
Il primo elemento di un vettore in Perl ha indice 0, quindi se un
vettore ha n elementi, l'ultimo elemento ha indice n-1. Ad esempio lo
script precedente fornisce il seguente risultato:
$ frutta.pl
un cesto pieno di pere.
$ _
Può essere interessante osservare come sia possibile utilizzare gli
array nel trattamento di file di testo. A seconda dei casi, e
soprattutto in funzione della dimensione del file da leggere, può
essere opportuno leggere il file una riga per volta, assegnando la
riga letta ad una variabile scalare, ovvero leggere il file per
intero, assegnando ogni riga del file ad un elemento di un array di
stringhe.
#!/usr/local/bin/perl
# leggi.pl
# legge i dati dallo standard input una riga per volta
# e li stampa
$i = 0;
while ($riga = <STDIN>) {
$i++;
print "$i) $riga";
}
#!/usr/local/bin/perl
# leggi_2.pl
# legge i dati dallo standard input per intero
# e poi li stampa
@riga = <STDIN>;
for ($i=0; $i<=$#riga; $i++) {
print "$i) $riga[$i]";
}
Nel primo esempio (leggi.pl) il file viene letto una riga alla volta
ed immediatamente stampata; viene quindi fatto un uso limitato della
memoria della macchina, ma non è possibile utilizzare in seguito le
righe del file lette ai passi precedenti. Viceversa nel secondo
esempio (leggi_2.pl) il file viene caricato in memoria per intero,
assegnando ad ogni componente dell'array @riga una linea del file di
testo; successivamente le linee vengono stampate (facendo uso della
struttura di controllo for che introdurremo in seguito). In questo
caso il programma può utilizzare in qualsiasi momento ogni linea del
file, senza doverla rileggere; tuttavia se il file è di grosse
dimensioni, viene fatto un uso pesante della memoria della macchina.
L'espressione ``$#riga'' fornisce l'indice dell'ultima componente
dell'array @riga.
.
Lezione
successiva => Torna
all'indice
|
|
|