Alla pari dei più diffusi linguaggi di
programmazione an il Perl ha le sue brave regole di precedenza e di
associatività degli operatori all'interno di espressioni più
complesse, contenenti un insieme di operatori ed operandi, al fine
di produrre un nuovo valore, abbiamo già visto alcuni semplici
esempi tramite la lezione sulle operazioni, ora vedremmo di
illustrare situazioni più complesse.
Cominciamo quindi a stabilire la precedenza tra quali operatori
hanno il privilegio di essere valutati prima di altri. Come ormai
ovvio il Perl fa di tutto per rendere le cose più normali e
naturali possibili, risolvendo qualunque ambiguità su cosa debba
essere eseguito prima, in base alle più normali regole della
matematica e dell'algebra, facciamo un esempio per capirci ulteriormente
meglio:
$a = 3;
$b = $a**2/2;
# l'espressione $b vale 32/2
# quindi uguale a 4,5
# e non 32/2 con un valore errato di 3
# nel qual caso avremmo dovuto
# scrivere $a**(2/2);
print "$b \n";
# vale 4,5
$c = $a**2*2;
print "$c \n";
# vale 18
L'associatività risolve invece un altro problema d'ambiguità
inerente alle modalità d'incorporazione degli operatori con ugual
livello di priorità. L'associazione tra operatori può essere si
destra, sia sinistra che addirittura nulla, vediamo ora un esempio:
$a = 3;
$b = $a**2**2;
print " $b \n";
# in questo caso l'asociazione tra
operatori
# è rivolta a destra, in quanto risulta di maggiore
# priorità risolvere prima tutte le operazioni di potenza
# quindi il risultato sarà dato da $a**(2**2) uguale a 81
$c = 6/3*2;
# pur non essendoci alcun conflitto tra
la divisione e la
# moltiplicazione assoceremo, per semplicità , a sinistra
# i privilegi dell'operazione in questo modo (6/3)*2
print " $c \n";
# vale 4
Ovviamente si consiglia sempre l'uso delle parentesi per
risolvere l'espressioni più complesse, ed anche per facilitarne la
leggibilità dello script stesso ad altri.
Per esercizio provate a calcolare la seguente espressione
Q2(0,32+1.25S)S
s= -----------------------------------
Q2(0,32)4+(1,25+S)S/Q
s= valore dell'espressione da calcolare
Q= 1.845
S= 5.35