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
"
;
$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