Perl/Variabili scalari: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 117:
===La stringa===
La stringa è una fila di caratteri che può essere anche vuota.
Quindi una fila di caratteri (qualsiasi) è una stringa.
La stringa può essere individuata da due simboli: il " ed il '.
Il primo mette nella stringa il valore della variabile.
Il secondo NON sostituisce nulla e lascia inalterata la stringa.
 
====La stringa "pura"====
Con questa definizione intendo una sequenza di caratteri che vengono assegnati o usati "così come sono".
Il carattere che distingue una stringa "pura" dal contesto di programmazione è il ->'<-.
 
ESEMPI:
<source lang="perl">
# ESEMPIO 1
$a = '' # stringa vuota
$a = ""'1234'; # in $a c'è una stringa di quattro caratteri # stringa vuota(1234).
$ba = 'pippoabcd'; # in $a c'è una stringa #di stringaquattro caratteri (abcd).
$ca = 'correabcd nel prato'; # altrain $a c'è una stringa di cinque caratteri (abcd e uno spazio).
$da = "$b'questa $cè contento"una stringa di caratteri'; # contienein $a c'è :una pippostringa corredi nel33 pratocaratteri contento.
$ea = '$b' $c contento'; # contiene : $b # in $a c'è una stringa vuota contento!
</source>
 
 
nel caso di $d è stato sostituito a $b pippo e a $c corre nel prato mentre nel caso di $e questo non è avvenuto. Questo perché il " consente la sostituzione mentre ' non lo consente.
====La stringa "interpolata"====
'''ATTENZIONE''': i simboli ' e " sono operatori (e non solo convenzioni di sintassi!)
La stringa interpolata consente la sostituzione di alcune entità indicate nella stringa con il loro valore.
Al posto di ' e " è persino possibile usare q/.../ per ' e qq/.../ per "
quindiIn avremmopratica potutoconsente di scrivere ancheil valore di una :variabile.
Il carattere che distingue una stringa "interpolata" dal contesto di programmazione è il ->"<-.
Vediamo gli esempi precedenti con le "" al posto di ''.
 
<source lang="perl">
# ESEMPIO 1
$a = q//; # stringa vuota
$a = qq//"1234"; # in $a c'è una stringa di quattro caratteri (1234) #uguale stringaall'esempio vuotaprecedente.
$ba = q/pippo/"abcd"; # in $a c'è una stringa #di stringaquattro caratteri (abcd) uguale all'esempio precedente.
$a = "abcd "; # in $a c'è una stringa di cinque caratteri (abcd e uno spazio) uguale all'esempio precedente.
$c = q/corre nel prato/; # altra stringa
$da = qq/$b"questa $cè contento/una stringa di caratteri"; # contienein $a c'è :una pippostringa corredi nel33 pratocaratteri contento.
$ea = q/$b"" $c contento/; # contiene : $b # in $a c'è una stringa vuota contento!
</source>
 
Per il gruppo di stringhe dell'esempio 1 scriverle con "" o con '' è esattamente la stessa cosa : il valore finale sarà lo stesso.
Inoltre è possibile sostituire al carattere / con i caratteri {,(,% per migliorare la leggibilità : per esempio se dovessi scrivere 2006/12/22 con qq/ dovrei distinguere fra / usato come simbolo di separazione della data e / usato come termine di qq/.
Ovviamente essendo il carattere ->"<- il carattere che indica inizio e la fine non si ha problemi con il carattere ->'<-
Per fare questo è possibile cambiare simbolo (oppure usare il carattere speciale \/ vedi dopo).
Quindiquindi potremmoè possibi scrivere:
 
<source lang="perl">
$a = "questa e' una stringa di caratteri";
$f = "2006/12/22";
$f = qq(2006/12/22);
$f = qq{2006/12/22};
</source>
 
senza problemi.
====Operazioni con le stringhe====
Come nel caso precedente se dovessimo scrivere il carattere ->"<- come carattere all'interno della stringa, occorrerà farlo precedere dal carattere ->\<- :
 
<source lang="perl">
=====Concatenare più stringhe=====
$a = "\"virgolettato\""; # a ora ha il valore "virgolettato"
Con il carattere . è possibile concatenare più stringhe per esempio:
</source>
 
Vediamo ora le caratteristiche di usare il simbolo ->"<- al posto di ->'<-
<source lang="perl">
$d = $b . " " . $c . " contento"; # contiene : "pippo corre nel prato contento"
</source>
 
=====Istruzione "complessa" con le stringhe=====
<source lang="perl">
#ESEMPIO 2
$d = q/$b=/ . qq/$b/ . "\n"; # contiene "$b=pippo"
$a = "quest'estate farà caldo"; # in $a c'è una stringa 22 caratteri (quest'estate farà caldo).
$b = "$a"; # in $b c'è una stringa 22 caratteri (quest'estate farà caldo) dato dalla sostituzione del valore di $a.
$a = "$a"; # in $a c'è il valore di $a cioè lo stesso valore di prima !.
</source>
 
Quindi con il delimitatore ->"<- è possibile usare il valore delle variabili al posto del nome della variabile stessa.
 
====I caratteri speciali====
Si è detto che il carattere ->'<- può individuare l'inizio e la fine di una stringa.
Si è detto che anche il carattere ->"<- può individuare l'inizio e la fine di una stringa.
 
Ma se all'intero di una stringa delimitata da ->'<- ci fosse il carattere ' come si potrebbe scrivere il codice seguente:
 
<source lang="perl">
$a = 'questa e' una stringa'; # stringa di 21 caratteri ERRATA SINTASSI.
</source>
 
oppure se all'intero di una stringa delimitata da ->"<- ci fosse il carattere ":
 
<source lang="perl">
$a = "questa e' una "stringa""; # stringa di 23 caratteri ERRATA SINTASSI.
</source>
 
Per evitare limitazioni per poter scrivere il carattere ->'<- all'interno di una stringa "pura" occorre anticiparlo dal carattere ->\<- che fa in modo di dire all'interprete che il carattere che segue (in questo caso il ') è da considerarsi in modo particolare.
Vediamo ora come si deve scrivere la riga precedente:
 
<source lang="perl">
$a = 'questa e\' una stringa'; # in $a c'è una stringa di 21 caratteri GIUSTA SINTASSI.
</source>
 
quindi il successivo esempio occorre scriverlo:
 
<source lang="perl">
$a = "questa e' una \"stringa\""; # stringa di 23 caratteri GIUSTA SINTASSI.
</source>
I caratteri speciali sono delle combinazioni di caratteri semplici che "servono a informare" che si vuole fare un "azione" particolare.
Da prestare attenzione che:
# nel caso della stringa pura il solo carattere speciale è il \'
 
Le stringhe possono contenere caratteri speciali , alcuni di questi sono:
 
Line 214 ⟶ 251:
 
Vediamo qualche esempio:
Se si volesse scrivere la frase : "pippo" corre nel prato
 
<source lang="perl">
$b = 'pippo';
$c = 'corre nel prato';
$d = '"'.$b.'"'." ".$c." contento"; # contiene : "pippo" corre nel prato contento
$d = " \"$b\" $c contento"; # contiene : "pippo" corre nel prato contento
# (un po' meglio)
$d = qq("$b" $c contento); # contiene : "pippo" corre nel prato contento
# (molto meglio)
</source>
 
Line 228 ⟶ 265:
<source lang="perl">
$d = " \U$b\E $c contento"; # verrà mostrato come : PIPPO corre nel prato contento
</source>
'''ATTENZIONE''' i simboli ' e " sono operatori ( e non solo convenzioni di sintassi !)
 
Per una migliore comprensione del testo è sono stati introdotti al posto di ' e " , rispettivamente q/.../ per ' e qq/.../ per "
quindi avremmo potuto scrivere anche :
 
<source lang="perl">
$a = q//; # stringa vuota
$a = qq//; # stringa vuota
$b = q/pippo/; # stringa
$c = q/corre nel prato/; # altra stringa
$d = qq/$b $c contento/; # contiene : pippo corre nel prato contento
$e = q/$b $c contento/; # contiene : $b $c contento
</source>
 
Inoltre è possibile sostituire al carattere / con i caratteri {,(,% per migliorare la leggibilità : per esempio se dovessi scrivere 2006/12/22 con qq/ dovrei distinguere fra / usato come simbolo di separazione della data e / usato come termine di qq/.
Per fare questo è possibile cambiare simbolo (oppure usare il carattere speciale \/ vedi dopo).
Quindi potremmo scrivere:
 
<source lang="perl">
$f = "2006/12/22";
$f = qq(2006/12/22);
$f = qq{2006/12/22};
</source>
 
====Operazioni con le stringhe====
 
=====Concatenare più stringhe=====
Con il carattere . è possibile concatenare più stringhe per esempio:
 
<source lang="perl">
$d = $b . " " . $c . " contento"; # contiene : "pippo corre nel prato contento"
</source>
 
=====istruzione "complessa" con le stringhe=====
 
<source lang="perl">
$d = q/$b=/ . qq/$b/ . "\n"; # contiene "$b=pippo" e un ritorno a capo
</source>
ma forse è meglio scriverla:
<source lang="perl">
$d = '$b=' . "$b\n"; # contiene "$b=pippo" e un ritorno a capo
</source>
oppure anche:
<source lang="perl">
$d = '$b=' . $b. "\n"; # contiene "$b=pippo" e un ritorno a capo
</source>