Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.4.1 Numerical Operators

The basic numerical operators in Perl are like others that you might see in other high level languages. In fact, Perl's numeric operators were designed to mimic those in the C programming language.

First, consider this example:

use strict; my $x = 5 * 2 + 3; # $x is 13 my $y = 2 * $x / 4; # $y is 6.5 my $z = (2 ** 6) ** 2; # $z is 4096 my $a = ($z - 96) * 2; # $a is 8000 my $b = $x % 5; # 3, 13 modulo 5

As you can see from this code, the operators work similar to rules of algebra. When using the operators there are two rules that you have to keep in mind--the rules of precedence and the rules of associativity.

Precedence involves which operators will get evaluated first when the expression is ambiguous. For example, consider the first line in our example, which includes the expression, 5 * 2 + 3. Since the multiplication operator (*) has precedence over the addition operator (+), the multiplication operation occurs first. Thus, the expression evaluates to 10 + 3 temporarily, and finally evaluates to 13. In other words, precedence dictates which operation occurs first.

What happens when two operations have the same precedence? That is when associativity comes into play. Associativity is either left or right (7). For example, in the expression 2 * $x / 4 we have two operators with equal precedence, * and /. Perl needs to make a choice about the order in which they get carried out. To do this, it uses the associativity. Since multiplication and division are left associative, it works the expression from left to right, first evaluating to 26 / 4 (since $x was 13), and then finally evaluating to 6.5.

Briefly, for the sake of example, we will take a look at an operator that is left associative, so we can contrast the difference with right associativity. Notice when we used the exponentiation (**) operator in the example above, we had to write (2 ** 6) ** 2, and not 2 ** 6 ** 2.

What does 2 ** 6 ** 2 evaluate to? Since ** (exponentiation) is right associative, first the 6 ** 2 gets evaluated, yielding the expression 2 ** 36, which yields 68719476736, which is definitely not 4096!

Here is a table of the operators we have talked about so far. They are listed in order of precedence. Each line in the table is one order of precedence. Naturally, operators on the same line have the same precedence. The higher an operator is in the table, the higher its precedence.

Operator Associativity Description
** right exponentiation
*, /, % left multiplication, division, modulus
+, - left addition, subtraction


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]


 
 
  Published under the terms of the GNU General Public License Design by Interspire