Variabili scalary ed array

Guida a Perl
di M. Liverani

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.

© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /perl/variabiliscalari.asp?print=ok