95 |
Ordinea operaţiilor
Precum Aritmetica, limbajul Perl are definită o ordine în execuţia operaţiilor. În aritmetică se execută, spre exemplu, înmulţirea şi împărţirea înaintea adunărilor şi scăderilor. Spunem că operaţiile de înmulţire şi împărţire au o mai mare precedenţă decât operaţiile de adunare şi scădere. Tabelul de precedenţă a operatorilor în Perl este următorul.
Operator |
Operaţia efectuată |
++, -- |
Autoincrement and autodecrement |
-, ~, ! |
Operatori unari |
** |
Exponenţierea |
=~, !~ |
Operatori de identificare a subşirurilor identice (Pattern-matching operators) |
*, /, %, x |
Înmulţirea, împărţirea, restul, repetare |
+, -, . |
Adunarea, scăderea şi concatenarea |
<<, >> |
Operatori de deplasare |
-e, -r, etc. |
Operatori de stare fişier (file-status) |
<, <=, >, >=, lt, le, gt, ge |
Inegalitate şi comparare |
==, !=, <=>, eq, ne, cmp |
Egalitate şi comparare |
& |
AND la nivel de bit |
|, ^ |
OR şi XOR la nivel de bit |
&& |
AND logic |
|| |
OR logic |
.. |
operatorul List-range |
? : |
Operatorul condiţional |
=, +=, -=, *=, |
Operatorii de atribuire |
and so on |
|
, |
Operatorul virgulă |
not |
NOT logic de precedenţă mică |
and |
AND logic de precedenţă mică |
or, xor |
OR şi XOR logic de precedenţă mică |
Spre exemplu, instrucţiunea
$result = 11 + 2 * 2 ** 3 << 2;
se execută ca şi cum ar exista parantezele
$result = (11 + (2 * (2 ** 3))) << 2;
şi operatorii ar fi de egală precedenţă.
Observaţie. Operatorii list-range, file-status şi pattern-matching vor fi definiţi în secţiunile următoare.
Asociativitatea operaţiilor
Asociativitatea se referă la ordinea în care se efectuează operatorii cu aceeaşi precedenţă.
La anumite operaţii cum sunt adunarea şi scăderea şi nu contează ordinea în care se fac operaţiile. La exponenţiere stau altfel lucrurile. Spre exemplu, (2**3)**2=64 şi 2**(3**2)=512. De aceea în Perl (în toate limbajele, de altfel) anumite operaţii se efectuează de la stânga la dreapta, altele de la dreapta la stânga.
Operator |
Asociativitatea |
++, |
neaplicabilă |
-, ~, ! |
de la dreapta la stânga |
** |
de la dreapta la stânga |
=~, !~ |
de la stânga la dreapta |
*, /, %, x |
de la stânga la dreapta |
+, -, . |
de la stânga la dreapta |
<<, >> |
de la stânga la dreapta |
-e, -r |
neaplicabilă |
<, <=, >, >=, lt, le, gt, ge |
de la stânga la dreapta |
==, !=, <=>, eq, ne, cmp |
de la stânga la dreapta |
& |
de la stânga la dreapta |
|, ^ |
de la stânga la dreapta |
&& |
de la stânga la dreapta |
|| |
de la stânga la dreapta |
.. |
de la stânga la dreapta |
? : |
de la dreapta la stânga |
=, +=, -=, *= |
de la dreapta la stânga |
and so on |
|
, |
de la stânga la dreapta |
not |
de la stânga la dreapta |
and |
de la stânga la dreapta |
or, xor |
de la stânga la dreapta |
© Cornel Mironel Niculae, 2003-2004
13-Nov-2009