Lezioni pratiche sulla programmazione in Perl

Stringhe
Nel linguaggio Perl viene definita stringa un un valore composto da una sequenza di caratteri, senza alcun logico criterio d'ordine. Per sequenza di caratteri intenderemo tutto l'insieme ASCII più gli escape ( \n, per esempio ).
Anche se le stringhe sono formate da più caratteri esse possono essere considerate come un unico valore, analogamente al concetto d'insieme, nella teoria degli insiemi, dove pur avendo più elementi corrisponde a un tutto unico, gli Array in Perl possono contenere tanti elementi, ma nel loro insieme questi elementi definiscono il valore di un array.
La semplicità del linguaggio porta a distinguere due soli tipi di stringhe, quelle con interpolazione delle variabili e interpretazione degli escape e quelle senza interpolazione ed interpretazione. Si dicono stringhe interpolate, e di conseguenza interpretate, quelle delimitate in un comando tra i doppi apici, mentre non sono interpolate ne interpretate quelle tra apici singoli, ad esempio:

$a = ' felici e contenti';
# $a definisce la nostra variabile stringa
print "E vissero $a \n";
# chiediamo al programma di stampare
# la stringa in modo interpolato
print 'E vissero $a \n';
# chiediamo al programma di stampare
# la stringa in modo non interpolato

Se provate ora ad eseguire il programma, avrete come risultato per la prima stringa "E vissero felici e contenti" con un ritorno a capo dato dall'interpretazione dell'escape \n, mentre nella seconda stringa otterrete "E vissero $a \n" senza nessuna manipolazione del contenuto del comando print.
Quindi nel Perl l'impiego dei doppi apici risulta un qualcosa in più rispetto ad una semplice convenzione, e lo dimostra anche il fatto che esisto diversi modi per rappresentare gli apici:

qq/ciao mamma/
# corrisponde a "ciao mamma"
q/ciao mamma/
# corrisponde a 'ciao mamma'
qq{ciao papà}
# corrisponde a "ciao papà"
q{ciao papà}
# corrisponde a 'ciao papà'

Il Perl, comunque, riconosce un caso particolare di stringa dove la differenza tra doppi apici e singoli è del tutto inrilevante, e cioè il caso in cui il valore espresso dalla stringa sia nullo, stringa nulla, di seguito sono riportati gli esempi per rappresentarle:

" "
'  '
qq//
q//
qq{}
q{}

La stringa nulla gioca comunque un ruolo molto importante nella definizione di concetto tra vero e falso, come vedremo tra poco.

Operazioni con stringhe
Le operazioni più importanti, che si ottengono con le stringhe sono la concatenazione e la ripetizione, un esempio di concatenazione può essere il seguente:

$a = 'Costantini';
$b = 'Giordano';

$c = $a . $b;
# vale CosatantiniGiordano
# se vogliamo inserire uno spazio
# tra le variabili $a e $b potremmo
# aggiungere una stringa nulla
$d = $a . " " . $b;
# vale Costantini Giordano
# specificare il valore di $a e $b è stata solo
# mia scelta per rendere più complensibile l'esempio
# ma avremmo potuto anche farne ammeno scrivendo
# direttamente quanto segue:
$e = "Costantini" . " " . "Giordano";
# avremmo potuto inoltre ricavare lo spazio
# distanziatore tra i due valo in questo modo
$f = "Costantini " . "Giordano";

La ripetizione delle stringhe corrisponde ad una operazione molto originale, ecco alcuni esempi:

$a = "Ciao " x 3;
# mediante l'impiego di questa operazione
# sarà possibile specificare il valore "ciao ciao ciao"
# allo scalare $a, il carattere "x" indica d'effettuare la
# ripetizione ed il numero tre scelto a piacere indica
# il numero di ripetizioni da effettuare

$b = 'ciao' x 2;
# non vi è alcuna differenza tra gli apici doppi e quelli singoli
$c = "--" x 80;
$d = "3" x (2*3);
# vale 333333
$e = "3 " x (2*3);
# vale 3 3 3 3 3 3
$f = (3-2) x 4;
# vale 1111

Operatori di confronto tra stringhe
Gli operatori di confronto tra stringhe sono equivalenti a quelli impiegati per i valori numerici, con l'unica differenza che al posto dei normali operatori di confronto simbolici, utilizzati per i valori numerici, useremo i seguenti:

minore lt
minore o uguale le
uguale eq
diverso ne
maggiore gt
maggiore o uguale ge

Facciamo un esempio:

$a=franco;
$b=bollo;
$c=$a . $b;

$a lt $b
# espressione falsa
$a le $b
# espressione falsa
$a == $b
# errore di sintassi
$a eq $b
# espressione falsa
$a gt $b
# espressione vera
$a gl $b
# espressione vera
$c eq "francobollo"
# espressione vera

Vero e falso
Per quanto riguarda il discorso sulle stringhe, si considerano false la stringhe nulle ed ovviamente vere la stringhe non nulle, come le più normali e semplici logiche di pensiero, anche per il Perl si considera vero tutto ciò che è vero e falso ciò che non appare vero, si considera falsa anche la stringa '0', attenzione però a non confondere con '00' che viene considerata vera come una sequenza di due caratteri 0.
In sostanza il Perl non ha valori booleani (vero o falso), ma solo stringhe nulle, stringhe "0", e il numero 0 vengono valutati false tutto il resto risulta vero.


Provate ad esercitarvi con queste poche nozioni a scrivere qualche semplice script come quello dell'esempio.