paper.gifioProgrammo N°2, Marzo 1997 ©Copyright DIEMME Editori

fire.gif

"HELLO WORLD"
Un classico
Il nostro primo script in Perl? Due righe di codice che stampano a video la frase più amata dai programmatori: "Hello world"

#!/usr/bin/perl
print "Hello world\n";

Salviamo lo script con nome "hello" ed attiviamone gli attributi di esecuzione con un "chmod u+x hello". Subito alcune considerazioni. La prima riga è l'equivalente del comando "/usr/bin/perl hello", comando eseguito automaticamente da Linux quando incontra il simbolo "#!". La seconda riga è un'istruzione ed in quanto tale deve finire con un punto e virgola. "print" è una funzione predefinita di Perl che permette di stampare a video una stringa. Poichè siamo pignoli vogliamo fare un controllo della sintassi dello script, basta usare il comando "perl -c hello". Ora siamo pronti per eseguire il programma ed affrontare gli argomenti di questo articolo: variabili ed operatori.
linea.gif
VARIABILI SCALARI ED ARRAY
In Perl le variabili scalari rappresentano i tipi di dati fondamentali: interi, stringhe e numeri in virgola mobile. Non è necessario dichiararle e si possono usare in un punto qualsiasi del programma, anche se non sono state inizializzate. Il nome che usiamo per identificare una variabile inizia sempre con il simbolo di dollaro $. Consideriamo il seguente esempio, in cui vengono inizializzate, sommate e stampate alcune varibili scalari:

#!/usr/bin/perl
$ambiente = "Linux";
$linguaggio = "Perl";
print "Programmo in $ambiente con $linguaggio\n";
$a = 10;
$b = 20;
$somma= $a + $b;
print "Somma di due numeri: $a + $b = $somma\n";

Il programma una volta eseguito stampa a video le righe:

Programmo in Linux con Perl
Somma di due numeri: 10 + 20 = 30
E' importante osservare che Perl stampa il contenuto di tutte le variabili scritte in una stringa racchiusa tra doppi apici. Se avessimo usato gli apici singoli

print 'Somma di di due numeri: $a + $b = $somma\n';
perl non avrebbe valutato nè le varibili nè il simbolo di nuova linea \n, stampando a video questo risultato:

Somma di due numeri: $a + $b = $somma\n
In perl esistono molte variabili predefinite. $$ è il PID dello script che abbiamo eseguito.

print "questo script è il processo $$\n";
$_ (dollaro e underscore) è l'argomento di default di molte funzioni. Per esempio nel caso in cui perl stia leggendo una riga dallo standard input, $_ contiene proprio la riga letta. In sostanza il contenuto di questa variabile speciale varia col variare del contesto un cui viene usata. Un'altra variabile predefinita è $0 che contiene il nome dello script

print "questo script si chiama $0\n";
Un array invece è un'insieme di varibili scalari ed il nome usato per defnirlo inizia con il simbolo @. Per accedere al contenuto di un array si usano gli indici: il primo elemento ha indice 0. Esempio:

#!/usr/bin/perl
@numeri = ("Uno", "Due", "Tre");
print "Array = @numeri\n"; 
print "Il primo elemento dell'array è $numeri[0]\n";
$numelem = @numeri; 
print "Nell'array ci sono $numelem elementi\n"; 
print "L'ultimo elemento dell'array è $numeri[2]\n";

Eseguito lo script otteniamo:

Array = Uno Due Tre
Il primo elemento dell'array è Uno
Nell'array ci sono 3 elementi 
L'ultimo elemento dell'array è Tre
Si osserva che per stampare l'intero array basta usare la funzione print con il nome dell'array stesso. Per conoscere invece il numero di elementi dell'array è sufficiente una istruzione di assegnazione ($numelem = @numeri). Come per le variabili esistono array predefiniti. @ARGV contiene le opzioni che passiamo allo script sulla riga di comando, mentre @_ contiene i parametri passati alle subroutine.

#!/usr/bin/perl
$somma = $ARGV[0] + $ARGV[1];
print "La somma è $somma\n";

Chiamiamo questo script "somma" e sulla riga di comando scriviamo

somma 1 2
In output otteniamo:
La somma è 3
L'ultima categoria di variabili è rappresentata dagli array associativi. Il nome che usiamo per definirli inizia con il simbolo di percentuale %. La caratteristica fondamentale di queste variabili è data dalla possibilità di usare una stringa come indice anzichè un intero.

...
%amico = ("nome", "Pinco", "cognome", "Pallino", "telefono", "123456");
print "Il nome del mio amico è $amico{\"nome\"}\n";
print "Il suo numero di telefono è $amico{\"telefono\"}\n";
...

Nell'array amico il primo indice è "nome" a cui è associata la stringa Pinco. Ecco perchè nella funzione print si usa il simbolo di dollaro invece del simbolo %, proprio perchè nome è un dato di tipo stringa: una semplice variabile scalare. In perl sono disponibili molte funzioni per gestire gli array associativi. Alcune di queste sono molto potenti e permettono di scrivere algoritimi sintetici ed efficaci.
linea.gif
GLI OPERATORI
Perl offre praticamente la stessa gamma di operatori del linguaggio C. In più ne sono stati creati di nuovi soprattutto per esaltare le funzionalità per il trattamento del testo tipiche del linguaggio. Accanto ai tradizionali operatori matematici + - * / ** (operatore esponenziale), di incremento ++ e decremento -- relazionali == > < >= <= e logici come && || ! , troviamo gli operatori per gestire le stringhe. Per verificare se due stringhe sono uguali non si usa l'operatore ==, valido per confrontare solo dati numerici, ma bensì si adopera l'operatore "eq".

...
if ($nome1 eq $nome2) {
  print "I due nomi sono uguali\n";
}
...

Viceversa per testare la disuguaglianza di due stringhe si usa l'operatore "ne". L'operatore "lt" (minore di stringa), invece, verifica se una stringa è minore di un'altra

...
if ($stringa1 lt $stringa2) {
  print "stringa1 è minore di stringa2;
}
...

mentre "gt" fa l'esatto contrario (maggiore di stringa). Il risultato maggiore o minore viene stabilito con logica lessicografica, ovvero secondo l'ordine del dizionario, e non in base alla lunghezza della stringa. Per concatenare due stringhe si usa l'operatore punto ".". Per esempio

...
$stringa1 = "Perl";
$stringa2 = " v.4";
$concatena = $stringa1.$stringa2;
print "$concatena\n";
...

che eseguito stampa a video: Perl v.4 Possiamo inoltre inizializzare un array usando l'operatore intervallo ".."

...
@lettere = ('a'..'z'); #contiene le lettere minuscole dell'alfabeto
@dieci = (0..9);       #contiene i numeri da 0 a 9
print "@lettere\n";
print "@dieci\n";
...

Un utile operatore è quello di ripetizione "x="che permette di ripetere più volte una stringa. Ecco un esempio per inizializzare una stringa con la parola "perl" ripetuta tre volte (perlperlperl)

...
$ripeti = "perl";
$ripeti x= 3;
print "$ripeti\n";
...

La nostra discussione su variabili, array ed operatori termina qui. Nei prossimi articoli ci occuperemo di espressioni regolari (la vera potenza di Perl) e di istruzioni di controllo: non mancate!

fire.gif

Data creazione HTML: Febbraio 1998
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you
exclaim.gif