Perl/Variabili scalari
Wikibooks, manuali e libri di testo liberi.
Le variabili scalari sono i mattoni delle variabili in Perl. Rappresentano una "entità" singola : una sola informazione. Non è necessario dichiarare una variabile per usarla.
Indice |
[modifica] Il nome
Per identificare una variabile occorre anteporre al nome il carattere $. Il nome di una variabile può essere composta da lettere, numeri, "_" , "'" e lunga fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.
$a; # è la variabile a $A; # è la variabile A diversa da a
[modifica] Il contenuto
Come precedentemente detto , l'interprete Perl mette nel contesto la variabile scalare e la "usa" nel modo migliore.
L'informazione può essere :
# un numero intero positivo (es 23 , un milione 1000000 o 1_000_000) # un numero intero negativo (es -12) # un numero in virgola mobile (es 7.20 , 7.20e3 ) # un numero intero ottale (es 02567 ) # un numero intero esadecimale (es 0xf8d7) # una stringa (successione di caratteri es."abcd") # la locazione di un'altra variabile (reference) # il valore indefinito "undef"
[modifica] I numeri
I numeri in Perl sono in forma "letterale" maggiormente comprensibili dall'uomo. È possibile utilizzare in più forme per esprimere i numeri.
Vediamo alcuni esempi:
$primo_numero = 5; # decimale $primo_numero = 05; # ottale (cifre da '''0''' a '''7''') $primo_numero = 5.0; # decimale in virgola mobile $primo_numero = 5.0e0; # decimale in virgola mobile (NOTA : '''e''' sta per 10 alla ...) $primo_numero = 0x5; # esadecimale (cifre da '''0''' a '''9''' e lettere da '''a''' a '''f''' )
sono tutti modi di far valere la variabile primo_numero il numero intero 5.
NOTA per i numeri in migliaia c'è la possibilità di separare il valore con "_" senza che questo crei complicazioni di interpretazione.quindi scrivere 1000 i 1_000 è la stessa cosa (ma è più leggibile).
[modifica] Operazioni con i numeri
In Perl sono possibili le operazioni di assegnamento (=) , somma (+), sotrazione (-), moltiplicazione (*), divisione (/), modulo (%), elevamento a potenza (**), incremento (prima e dopo) (++), decremento (prima e dopo) (--). Questo è possibile tramite dei simboli che vengono chiamati operatori. Vediamo insieme alcune operazioni:
$p = 7; # assegnamento $s = 9; $r = 0; $r = $p + $s; # somma r vale ora 16 $r = $p - $s; # differenza r vale ora -2 $r = $p * $s; # moltiplicazione r vale ora 63 $r = $p / $s; # divisione r vale ora 0.777777777777778 $r = $p % $s; # modulo r vale ora 7 $r = $p ** $s; # elevamento r vale ora 40353607 ( 7 elevato alla 9 )
NOTA per operazioni più complesse ci sono delle apposite funzioni
NOTA1 il simbolo modulo ed il simbolo hash sono lo stesso "%" ma cambia il contesto.
Vediamo ora gli operatori di incremento e decremento. Questi aumentano i diminuiscono di una unità lo scalare numerico. Questa modifica della variabile può essere fatta prima o dopo l'uso della variabile stessa:
- se l'operatore viene messo prima della variabile allora viene prima modificata la variabile e poi viene usata all'interno del codice.
- Al contrario se l'operatore viene messo dopo la variabile allora prima viene usata la variabile e poi modificata.
vediamo un esempio:
$p = 7; # assegnamento $q = 0; $s = 9; $r = 0; $r = $s++; # post incremento ora $r = 9 , $s = 10 $q = ++$s; # pre incremento ora $q = 11 , $s = 11 $r = $p--; # post incremento ora $r = 7 , $p = 6 $q = --$p; # pre incremento ora $q = 5 , $p = 5
NOTA se p e s fossero in virgola mobile il loro valore viene incrementato/decrementato di uno senza alterare la parte decimale. es
$a = 1.2; $a++; ora $a vale 2.2
[modifica] La stringa
La stringa è una fila di caratteri che può essere anche vuota. 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.
$a = '' # stringa vuota $a = ""; # stringa vuota $b = 'pippo'; # stringa $c = 'corre nel prato'; # altra stringa $d = "$b $c contento"; # contiene : pippo corre nel prato contento $e = '$b $c contento'; # contiene : $b $c contento
nel caso di $d e' 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. ATTENZIONE il simbolo ' e " sono operatori ( e non solo convenzioni di sintassi !) Al posto di ' e " è persino possibile usare q/.../ per ' e qq/.../ per " quindi avremmo potuto scrivere anche :
$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
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:
$f = "2006/12/22"; $f = qq(2006/12/22); $f = qq{2006/12/22};
[modifica] Concatenare più stringhe
Con il carattere . è possibile concatenare più stringhe per esempio:
$d = $b." ".$c." contento"; # contiene : pippo corre nel prato contento
[modifica] I caratteri speciali
I caratteri speciali sono delle combinazioni di caratteri semplici che "servono a informare" che si vuole fare un "azione" particolare. Le stringhe possono contenere caratteri speciali , alcuni di questi sono:
\n newline (torna a capo) \r return \t tab \f formfeed \b backspace \a bell (il beep del computer) \e Escape \007 Numero espresso in Ottale della tabella ascii (equivalente a \a beep) \x07 Numero espresso in Esadecimale della tabella ascii (equivalente a \a beep) \cM il carattere di controllo CTRL+M \\ backslash \" doppio apice \$ il carattere $ (altrimenti potrebbe essere una variabile!) \l prossima lettera minuscola \u prossima lettera maiuscola \L tutte i caratteri che seguono in minuscolo fino a \E \U tutte i caratteri che seguono in maiuscolo fino a \E \Q quota tutti i caratteri non alfanumerici fino a \E \E fa terminare l'azione di \L,\U,\Q
Vediamo qualche esempio: Se si volesse scrivere la frase : "pippo" 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)
Se si volesse scrivere la frase : PIPPO corre nel prato (indipendentemente da cosa c'è in $b)
$d = " \U$b\E $c contento"; # verrà mostrato come : PIPPO corre nel prato contento
[modifica] I reference
Questa sezione introduce l'argomento per avere un quadro generale. Si veda la sezione dedicata per approfondire l'argomento.
Esaminiamo la scrittura sintattica:
$a = 5;
Vuol dire che associamo "all'etichetta" $a il contenuto 5 ed usiamo poi l'etichetta nel programma al posto del valore:
print $a."\n";
Il reference associa all'etichetta una sua etichetta pertanto lo stesso contenuto può essere scritto utilizzando "l'etichetta" $a o in modo adatto il suo reference.
- Un modo per creare un reference è quello di anteporre alla variabile il simbolo \.
- Un modo per riottenere il valore originale è quello di anteporre $ :
$a = 5; # variabile a $ref_a = \$a; # Ora sia ref_a che a "associano" lo stesso contenuto 5 print $a."\n"; # si ottiene 5 print $$ref_a."\n"; # si ottiene 5 $a++; # ora a = 6 e quindi anche ref_a print $a."\n"; # si ottiene 6 print $$ref_a."\n"; # si ottiene 6 $$ref_a++; # ora ref_a = 7 ed anche a perché è lo stesso valore ad essere trattato! print $a."\n"; # si ottiene 7 print $$ref_a."\n"; # si ottiene 7
NOTA: nell'esempio si è associato ad uno scalare $ref_a un altro scalare $a.è possibile associare qualsiasi tipo di variabile !
[modifica] Il valore indefinito undef
Il valore undef è uno speciale valore per dire che la variabile non è stata ancora associata ad alcun valore. Per esempio se si dichiara una variabile :
$u;
ma non si associa alcun valore questa assume lo speciale valore undef. Undef è un valore "polimorfico" nel senso che viene associato a 0 con i numeri e a stringa nulla con le stringhe.
[modifica] Dove sono i booleani?
Nel perl non esistono dei tipi booleani appositi e si usa questa convenzione:
- viene considerato false tutto quello che è associabile a 0 , "" e "0"
- viene considerato true tutto quello che non è false
[modifica] Uso di Or o || e di And o &&
Queste parole chiave si utilizzano per controllare la logica e per "operare" sugli scalari.
Or risulta "vero" se uno dei due estremi risulta "vero" in particolare viene valutato prima l'elemento a sinistra e poi quello a destra. And risulta "falso" se uno dei due estremi è "falso" in particolare viene valutato prima l'elemento a sinistra e poi quello a destra. Quindi Or "cerca" un "vero" per tornare "vero" mentre And cerca un "falso" per tornare "falso".
Vediamo il codice:
$a = 0; $b = 1; print "or:".( $a or $b )."\n"; print "and:"( $a and $b )."\n";
che produrrà:
or:1 and:0
Esempio con le stringhe:
$a = ""; $b = "vero"; print "or:".( $a or $b )."\n"; print "and:"( $a and $b )."\n";
che produrrà:
or:vero and:

