Livello di difficoltà: |
|
Il Perl, acronimo di Pratical extraction and report language, è diventato tanto popolare in Rete perché è il linguaggio più utilizzato per la creazine di programmi Cgi residenti su server Http. Può essere sfruttato sia su Web servers Apache che Iis.
|
| |
Variabili scalary ed array
Guida a Perl
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 | Tab. 3: 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.
|