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.
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
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
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.