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:
Strumenti personali