Ordinea şi asociativitatea operaţiilor

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