Perl 语言常用的几种运算符:
-
算术运算符
-
比较运算符
-
逻辑运算符
-
赋值运算符
-
位运算符
-
引号运算符
-
其他运算符
1、算数运算符
运算符 | 描述 |
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 除法求余 |
** | 乘幂 |
示例如下:
#!/usr/bin/perl -w use strict
$x = 3 ;
$y = 2 ;
$z = $x + $y ;
print "$x+$y = $z\n";
$z = $x - $y ;
print "$x-$y = $z\n";
$z = $x * $y ;
print "$x*$y = $z\n";
$z = $x / $y ;
print "$x/$y = $z\n";
$z = $x % $y ;
print "$x%$y = $z\n";
$z = $x ** $y ;
print "$x**$y = $z\n";
运算结果如下:
./script.pl
-> $x+$y = 5
$x-$y = 1
$x*$y = 6
$x/%y = 1.5
$x%$y = 1
$x**$y = 9
2、比较运算符
运算符 | 描述 |
---|---|
== | 运算符左右两边的值相等则条件为 true,否则为 false。 |
!= | 运算符左右两边的值不相等则条件为 true,否则为 false |
<=> | 运算符左边的值小于右边返回 -1,相等返回 0, 左边大于右边返回 1 。 |
> | 运算符左边的值大于右边则条件为 true,否则为 false。 |
< | 运算符左边的值小于右边则条件为 true,否则返回 false。 |
>= | 运算符左边的值大于等于右边则条件为 true,否则返回 false。 |
<= | 运算符左边的值小于等于右边则条件为 true,否则返回 false。 |
示例如下:
#!/usr/bin/perl -w use strict
$x = 3 ;
$y = 2 ;
$z = $x + $y ;
print "\$x<=>\$y = $z\n";
$x == $y ? print "\$x == \$y is true \n" : print "\$x == \$y is false \n";
$x != $y ? print "\$x != \$y is true \n" : print "\$x != \$y is false \n";
$x > $y ? print "\$x > \$y is true \n" : print "\$x > \$y is false \n";
$x < $y ? print "\$x < \$y is true \n" : print "\$x < \$y is false \n";
$x >= $y ? print "\$x >= \$y is true \n" : print "\$x >= \$y is false \n";
$x <= $y ? print "\$x <= \$y is true \n" : print "\$x <= \$y is false \n";
运行结果如下:
./script.pl
-> $x<=>$y = 1
$x == $y is false
$x != $y is true
$x > $y is true
$x < %y is false
$x >= $y is true
$x <= $y is false
除了数字的比较运算符以外,字符串也有比较运算符
运算符 | 描述 |
---|---|
eq | 运算符左右两边字符串相等返回true,否则返回false |
ne | 运算符左右两边字符串不相等返回true,否则返回false |
lt | 运算符左边字符串小于右边的返回true,否则返回false |
gt | 运算符左边字符串大于右边的返回true,否则返回false |
le | 运算符左边字符串小于等于右边的返回true,否则返回false |
ge | 运算符左边字符串大于等于右边的返回true,否则返回false |
cmp | 运算符左边字符串大于右边返回1,相等返回0,小于返回-1 |
示例如下:
#!/usr/bin/perl -w use strict
$x = "x" ;
$y = "y" ;
$X = "X" ;
$xx = "xx" ;
$z = $x cmp $y ;
print "x cmp y return $z\n";
$x eq $y ? print "x eq y is true \n" : print "x eq y is false \n";
$x ne $y ? print "x ne y is true \n" : print "x ne y is false \n";
$x lt $y ? print "x lt y is true \n" : print "x lt y is false \n";
$x gt $y ? print "x gt y is true \n" : print "x gt y is false \n";
$x le $y ? print "x le y is true \n" : print "x le y is false \n";
$x ge $y ? print "x ge y is true \n" : print "x ge y is false \n";
$X gt $x ? print "X gt x is true \n" : print "X gt x is false \n";
$xx gt $X ? print "xx gt X is true \n" : print "xx gt X is false \n";
运行结果如下:
./script.pl
-> x cmp y return -1
x eq y is false
x ne y is true
x lt y is true
x gt y is false
x le y is true
x ge y is false
X gt x is true
xx gt X is true
3、赋值运算符
与算数运算结合使用
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | $c = $a + $b 将把 $a + $b 的值赋给 $c |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | $c += $a 相等于 $c = $c + $a |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | $c -= $a 相等于 $c = $c - $a |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | $c *= $a 相等于 $c = $c * $a |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | $c /= $a 相等于 $c = $c / $a |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | $c %= $a 相等于 $c = $c % a |
**= | 乘幂且赋值运算符,求两个操作数的乘幂赋值给左边操作数 | $c **= $a 相等于 $c = $c ** $a |
4、位运算
二进制按位运算,逐位操作。1和2的二进制表示为0001和0010,按位与操作的话就是0011,,0和0与结果为0,1和1与结果1,1和0与结果为0,所以对应十进制结果为0 。
设$a = 1; $b = 2 ;对应的二进制为0000 0001和0000 0010 。
运算符 | 描述 | 实例 |
---|---|---|
& | 二进制按位与(AND)运算符,同为1时输出1,否则为0。 | ($a & $b) 将得到 0,二进制为0000 0000 |
| | 二进制按位或(OR)运算符,其中一边为1,就输出1,都为0时输出0。 | ($a | $b) 将得到 3 ,二进制为0000 0011 |
^ | 二进制异或运算符,只有一边为1一边为0时输出1,否则为0。 | ($a ^ $b) 将得到 3,二进制为0000 0011 |
~ | 二进制反码运算符,”翻转”符号位后减1。 | (~$a ) 将得到 -2 ,二进制为 0000 0110 ,一个有符号二进制数的反码形式(001变成110) |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数(0补齐)。 | $a << 2 将得到 4 ,二进制为 0000 0100 |
>> | 二进制右移运算符,左操作数的值向右移动右操作数指定的位数(0补齐)。 | $a >> 2 将得到 0 ,二进制为 0000 0000 |
~反码运算符需要注意的是要把符号位取反后减一,1的反码运算就是-2,-1的反码运算就是0,而且需要在perl脚本中加入use integer;。
5、逻辑运算符
运算符 | 描述 | 实例 |
---|---|---|
and | 逻辑与运算符。如果两个操作数都为 true,则条件为 true。 | ($a and $b) 为 false。 |
&& | C 风格的逻辑与运算符。如果两个操作数都为 true,则条件为 true | ($a && $b) 为 false。 |
or | 逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。 | ($a or $b) 为 true。 |
|| | C 风格逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。 | ($a || $b) 为 true。 |
not | 逻辑非运算符。用来反转操作数的逻辑状态。如果条件为 true,则逻辑非运算符将使其为 false。 | not($a and $b) 为 true。 |
6、引号运算
q与qq使用时搭配成对的分界符,常用的有()、{}、[],用字符代替也可以,只不过要相同
运算符 | 描述 | 实例 |
---|---|---|
q | 为字符串添加单引号 | q{abcd} 结果为 ‘abcd’ |
为字符串添加双引号 | qq{abcd} 等效为 “abcd”,qq xabcdx也等效为“abcd” | |
qw | 为字符串用空格分隔元素 | @array=qx(a b c d) 等效为@array=(a,b,c,d) |
qx | 给字符串添加反引号··,用来执行linux命令 | qx {echo abc},输出abc |
#!/usr/bin/perl -w use strict
$t = qx {echo abc};
print "$t";
@a = (a,b,c);
@b = qw(a b c);
print "a=@a , b=@b";
$c = "abc";
$d = qq xabcx;
$e = qq {abc};
print "c=$c,d=$d,e=$e";
运行结果为:
./script.pl
-> abc
a=a b c , b=a b c
c=abc,d=abc,e=abc
7、运算符优先级
++, -- | 无 |
-, ~, ! | 从右到左 |
** | 从右到左 |
=~, !~ | 从左到右 |
*, /, %, x | 从左到右 |
+, -, . | 从左到右 |
<<, >> | 从左到右 |
-e, -r, | 无 |
<, <=, >, >=, lt, le, gt, ge | 从左到右 |
==, !=, <=>, eq, ne, cmp | 从左到右 |
& | 从左到右 |
|, ^ | 从左到右 |
&& | 从左到右 |
|| | 从左到右 |
.. | 从左到右 |
? and : | 从右到左 |
=, +=, -=, *=, | 从右到左 |
not | 从左到右 |
and | 从左到右 |
or, xor | 从左到右 |