添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
print " \ $a = $a , \ $c = $c \ n " ; $c **= $a ; print " \ $c = $c ,运算语句 \ $c **= \ $a \ n " ;

以上程序执行输出结果为:

$a = 10 ,$b = 20 赋值后 $c = 30 $c = 40 ,运算语句 $c += $a $c = 30 ,运算语句 $c -= $a $c = 300 ,运算语句 $c *= $a $c = 30 ,运算语句 $c /= $a $c = 0 ,运算语句 $c %= $a $a = 4 , $c = 2 $c = 16 ,运算语句 $c **= $a

位运算符作用于位,并逐位执行操作。

设置 $a = 60,$b = 13,现在以二进制格式表示,它们如下所示:

$a = 0011 1100 $b = 0000 1101 ----------------- $a&$b = 0000 1100 $a|$b = 0011 1101 $a^$b = 0011 0001 ~$a = 1100 0011

Perl 支持的位运算符如下表所示:

如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 ($a & $b) 将得到 12,二进制为 0000 1100 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 ($a | $b) 将得到 61 ,二进制为 0011 1101 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 ($a ^ $b) 将得到 49,二进制为 0011 0001 二进制反码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。 (~$a ) 将得到 -61 ,二进制为 1100 0011 ,一个有符号二进制数的反码形式。 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 $a << 2 将得到 240 ,二进制为 1111 0000 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 $a >> 2 将得到 15 ,二进制为 0000 1111
#!/usr/bin/perl use integer ; $a = 60 ; $b = 13 ; print " \$ a = $a , \$ b = $b \n " ; $c = $a & $b ; print " \$ a & \$ b = $c \n " ; $c = $a | $b ; print " \$ a | \$ b = $c \n " ; $c = $a ^ $b ; print " \$ a ^ \$ b = $c \n " ; $c = ~ $a ; print " ~ \$ a = $c \n " ; $c = $a << 2 ; print " \$ a << 2 = $c \n " ; $c = $a >> 2 ; print " \$ a >> 2 = $c \n " ;

以上程序执行输出结果为:

$a = 60 , $b = 13 $a & $b = 12 $a | $b = 61 $a ^ $b = 49 ~$a = -61 $a << 2 = 240 $a >> 2 = 15

逻辑运算符

Perl 逻辑运算符如下表所示。

表格实例中我们设置变量 $a 为 true, $b 为 false。

逻辑与运算符符。如果两个操作数都为 true,则条件为 true。 ($a and $b) 为 false。 C 风格的逻辑与运算符符。如果两个操作数都为 true,则条件为 true ($a && $b) 为 false。 逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。 ($a or $b) 为 true。 C 风格逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。 ($a || $b) 为 true。 逻辑非运算符。用来反转操作数的逻辑状态。如果条件为 true,则逻辑非运算符将使其为 false。 not($a and $b) 为 true。
#!/usr/bin/perl $a = true ; $b = false ; print " \$ a = $a , \$ b = $b \n " ; $c = ( $a and $b ) ; print " \$ a and \$ b = $c \n " ; $c = ( $a && $b ) ; print " \$ a && \$ b = $c \n " ; $c = ( $a or $b ) ; print " \$ a or \$ b = $c \n " ; $c = ( $a || $b ) ; print " \$ a || \$ b = $c \n " ; $a = 0 ; $c = not ( $a ) ; print " not( \$ a)= $c \n " ;

以上程序执行输出结果为:

$a = true , $b = false $a and $b = false $a && $b = false $a or $b = true $a || $b = true not($a)= 1

Perl 引号运算符如下表所示。

为字符串添加单引号 q{abcd} 结果为 'abcd' qq{ } 为字符串添加双引号 qq{abcd} 结果为 "abcd" qx{ } 为字符串添加反引号 qx{abcd} 结果为 `abcd`
#!/usr/bin/perl $a = 10 ; $b = q{ a = $a } ; print " q{a = \$ a} = $b \n " ; $b = qq{ a = $a } ; print " qq{a = \$ a} = $b \n " ; # 使用 unix 的 date 命令执行 $t = qx {date}; print "q x { date } = $t \ n " ;

以上程序执行输出结果为:

q{a = $a} = a = $a qq{a = $a} = a = 10 qx{date} = 2016年 6月10日 星期五 16时22分33秒 CST

其他运算符

除了以上我们提到的运算符外,Perl 还支持以下运算符:

点号 (.) 用于连接两个字符串。 如果 $a="run", $b="oob" , $a.$b 结果为 "runoob" x 运算符返回字符串重复的次数。 ('-' x 3) 输出为 ---。 .. 为范围运算符。 (2..5) 输出结果为 (2, 3, 4, 5) 自增运算符,整数值增加 1 $a =10, $a++ 输出为 11 自减运算符,整数值减少 1 $a =10, $a-- 输出为 9 箭号用于指定一个类的方法$obj->$a 表示对象 $obj 的 $a 方法。
#!/usr/bin/perl $a = " run " ; $b = " oob " ; print " \$ a = $a \$ b = $b \n " ; $c = $a . $b ; print " \$ a . \$ b = $c \n " ; $c = " - " x 3 ; print " \" - \" x 3 = $c \n " ; @c = ( 2 . .5 ) ; print " (2..5) = @c \n " ; $a = 10 ; $b = 15 ; print " \$ a = $a \$ b = $b \n " ; $a ++; $c = $a ; print " \$ a 执行 \$ a++ = $c \n " ; $b --; $c = $b ; print " \$ b 执行 \$ b-- = $c \n " ;

以上程序执行输出结果为:

$a = run , $b = oob $a . $b = runoob "-" x 3 = --- (2..5) = 2 3 4 5 $a = 10 , $b = 15 $a 执行 $a++ = 11 $b 执行 $b-- = 14

运算符优先级

下表列出了 Perl 语言的运算符优先级:

运算符符 结合性
++, --
-, ~, ! 从右到左
** 从右到左
=~, !~ 从左到右
*, /, %, x 从左到右
+, -, . 从左到右
<<, >> 从左到右
-e, -r,
<, <=, >, >=, lt, le, gt, ge 从左到右
==, !=, <=>, eq, ne, cmp 从左到右
& 从左到右
|, ^ 从左到右
&& 从左到右
|| 从左到右
.. 从左到右
? and : 从右到左
=, +=, -=, *=, 从右到左
其他
, 从左到右
not 从左到右
and 从左到右
or, xor 从左到右

#!/usr/bin/perl $a = 20 ; $b = 10 ; $c = 15 ; $d = 5 ; print " \$ a = $a , \$ b = $b , \$ c = $c \$ d = $d \n " ; $e = ( $a + $b ) * $c / $d; print "(\$a + \$b) * \$c / \ $d = $e \ n " ; $e = (( $a + $b ) * $c )/ $d ; print " ( ( \ $a + \ $b ) * \ $c ) / \$d = $e\n"; $e = ($a + $b) * ($c / $d ); print " ( \$ a + \$ b) * ( \$ c / \$ d ) = $e \n " ; $e = $a + ( $b * $c ) / $d; print "\$a + (\$b * \$c ) / \ $d = $e \ n " ;

以上程序执行输出结果为:

$a = 20, $b = 10, $c = 15 ,$d = 5 ($a + $b) * $c / $d = 90 (($a + $b) * $c) / $d = 90 ($a + $b) * ($c / $d ) = 90 $a + ($b * $c )/ $d = 50