Perl 運算符

Perl 運算符

運算符是一種告訴編譯器執(zhí)行特定的數(shù)學或邏輯操作的符號,如: 3+2=5。

Perl 語言內置了豐富的運算符,我們來看下常用的幾種:


算術運算符

表格實例中我們設置變量 a 為 10,b 為 20。

運算符 描述 實例
+ 加法運算 a +b 結果為 30
- 減法運算 a -b 結果為 -10
* 乘法運算 a *b 結果為 200
/ 除法運算 b /a 結果為 2
% 求余運算,整除后的余數(shù) b %a 結果為 0
** 乘冪 a**b 結果為 10 的 20 次方

實例

#!/usr/bin/perl
 
$a = 10;
$b = 20;
 
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 / $b;
print '$a / $b = ' . $c . "\n";
 
$c = $a % $b;
print '$a % $b = ' . $c. "\n";
 
$a = 2;
$b = 4;
$c = $a ** $b;
print '$a ** $b = ' . $c . "\n";

以上程序執(zhí)行輸出結果為:

$a = 10 , $b = 20
$a + $b = 30
$a - $b = -10
$a * $b = 200
$a / $b = 0.5
$a % $b = 10
$a ** $b = 16

比較運算符

表格實例中我們設置變量 a 為 10,b 為 20。

運算符 描述 實例
== 檢查兩個操作數(shù)的值是否相等,如果相等則條件為 true,否則為 false。 (a ==b) 為 false
!= 檢查兩個操作數(shù)的值是否相等,如果不相等則條件為 true,否則為 false。 (a !=b) 為 true。
<=> 檢查兩個操作數(shù)的值是否相等, 如果左邊的數(shù)小于右邊的數(shù)返回 -1,如果相等返回 0, 如果左邊的數(shù)大于右邊的數(shù)返回 1 。 (a <=>b) 返回 -1。
> 檢查左操作數(shù)的值是否大于右操作數(shù)的值,如果是則條件為 true,否則為 false。 (a >b) 返回 false。
< 檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是則條件為 true,否則返回 false。 (a <b) 返回 true。
>= 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值,如果是則條件為 true,否則返回 false。 (a >=b) 返回 false。
<= 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值,如果是則條件為 true,否則返回 false。。 (a <=b) 返回 true。

實例

#!/usr/bin/perl
 
$a = 10;
$b = 20;
 
print "\$a = $a , \$b = $b\n";
 
if( $a == $b ){
   print "$a == \$b 結果 true\n";
}else{
   print "\$a == \$b 結果 false\n";
}
 
if( $a != $b ){
   print "\$a != \$b 結果 true\n";
}else{
   print "\$a != \$b 結果 false\n";
}
 
$c = $a <=> $b;
print "\$a <=> \$b 返回 $c\n";
 
if( $a > $b ){
   print "\$a > \$b 結果 true\n";
}else{
   print "\$a > \$b 結果 false\n";
}
 
if( $a >= $b ){
   print "\$a >= \$b 結果 true\n";
}else{
   print "\$a >= \$b 結果 false\n";
}
 
if( $a < $b ){
   print "\$a < \$b 結果 true\n";
}else{
   print "\$a < \$b 結果 false\n";
}
 
if( $a <= $b ){
   print "\$a <= \$b 結果 true\n";
}else{
   print "\$a <= \$b 結果 false\n";
}

以上程序執(zhí)行輸出結果為:

$a = 10 , $b = 20
$a == $b 結果 false
$a != $b 結果 true
$a <=> $b 返回 -1
$a > $b 結果 false
$a >= $b 結果 false
$a < $b 結果 true
$a <= $b 結果 true

以下表格實例中設置變量 a 為 "abc" ,b 為 "xyz" ,然后使用比較運算符來計算結果。

運算符 描述 實例
lt 檢查左邊的字符串是否小于右邊的字符串,如果是返回 true,否則返回 false。 (a ltb) 返回 true。
gt 檢查左邊的字符串是否大于右邊的字符串,如果是返回 true,否則返回 false。 (a gtb) 返回 false。
le 檢查左邊的字符串是否小于或等于右邊的字符串,如果是返回 true,否則返回 false。 (a leb) 返回 true
ge 檢查左邊的字符串是否大于或等于右邊的字符串,如果是返回 true,否則返回 false。 (a geb) 返回 false。
eq 檢查左邊的字符串是否等于右邊的字符串,如果是返回 true,否則返回 false。 (a eqb) 返回 false。
ne 檢查左邊的字符串是否不等于右邊的字符串,如果是返回 true,否則返回 false。 (a neb) 返回 true
cmp 如果左邊的字符串大于右邊的字符串返回 1,如果相等返回 0,如果左邊的字符串小于右邊的字符串返回 -1。 (a cmpb) 返回 -1。

實例

#!/usr/bin/perl
 
$a = "abc";
$b = "xyz";
 
print "\$a = $a ,\$b = $b\n";
 
if( $a lt $b ){
   print "$a lt \$b 返回 true\n";
}else{
   print "\$a lt \$b 返回 false\n";
}
 
if( $a gt $b ){
   print "\$a gt \$b 返回 true\n";
}else{
   print "\$a gt \$b 返回 false\n";
}
 
if( $a le $b ){
   print "\$a le \$b 返回 true\n";
}else{
   print "\$a le \$b 返回 false\n";
}
 
if( $a ge $b ){
   print "\$a ge \$b 返回 true\n";
}else{
   print "\$a ge \$b 返回 false\n";
}
 
if( $a ne $b ){
   print "\$a ne \$b 返回 true\n";
}else{
   print "\$a ne \$b 返回 false\n";
}
 
$c = $a cmp $b;
print "\$a cmp \$b 返回 $c\n";

以上程序執(zhí)行輸出結果為:

$a = abc ,$b = xyz
abc lt $b 返回 true
$a gt $b 返回 false
$a le $b 返回 true
$a ge $b 返回 false
$a ne $b 返回 true
$a cmp $b 返回 -1

賦值運算符

表格實例中我們設置變量 a 為 10,b 為 20。

運算符 描述 實例
= 簡單的賦值運算符,把右邊操作數(shù)的值賦給左邊操作數(shù) c =a + b 將把a + b 的值賦給c
+= 加且賦值運算符,把右邊操作數(shù)加上左邊操作數(shù)的結果賦值給左邊操作數(shù) c +=a 相等于 c =c + $a
-= 減且賦值運算符,把左邊操作數(shù)減去右邊操作數(shù)的結果賦值給左邊操作數(shù) c -=a 相等于 c =c - $a
*= 乘且賦值運算符,把右邊操作數(shù)乘以左邊操作數(shù)的結果賦值給左邊操作數(shù) c *=a 相等于 c =c * $a
/= 除且賦值運算符,把左邊操作數(shù)除以右邊操作數(shù)的結果賦值給左邊操作數(shù) c /=a 相等于 c =c / $a
%= 求模且賦值運算符,求兩個操作數(shù)的模賦值給左邊操作數(shù) c %=a 相等于 c =c % a
**= 乘冪且賦值運算符,求兩個操作數(shù)的乘冪賦值給左邊操作數(shù) c **=a 相等于 c =c ** $a

實例

#!/usr/bin/perl
 
$a = 10;
$b = 20;
 
print "\$a = $a ,\$b = $b\n";
 
$c = $a + $b;
print "賦值后 \$c = $c\n";
 
$c += $a;
print "\$c = $c ,運算語句 \$c += \$a\n";
 
$c -= $a;
print "\$c = $c ,運算語句 \$c -= \$a\n";
 
$c *= $a;
print "\$c = $c ,運算語句 \$c *= \$a\n";
 
$c /= $a;
print "\$c = $c ,運算語句 \$c /= \$a\n";
 
$c %= $a;
print "\$c = $c ,運算語句 \$c %= \$a\n";
 
$c = 2;
$a = 4;
print "\$a = $a , \$c = $c\n";
$c **= $a;
print "\$c = $c ,運算語句 \$c **= \$a\n";

以上程序執(zhí)行輸出結果為:

$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

位運算

位運算符作用于位,并逐位執(zhí)行操作。

設置 a = 60,b = 13,現(xiàn)在以二進制格式表示,它們如下所示:

$a = 0011 1100

$b = 0000 1101

-----------------

$a&$b = 0000 1100

$a|$b = 0011 1101

$a^$b = 0011 0001

~$a  = 1100 0011

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

運算符 描述 實例
& 如果同時存在于兩個操作數(shù)中,二進制 AND 運算符復制一位到結果中。 (a &b) 將得到 12,二進制為 0000 1100
| 如果存在于任一操作數(shù)中,二進制 OR 運算符復制一位到結果中。 ($a $b) 將得到 61 ,二進制為 0011 1101
^ 如果存在于其中一個操作數(shù)中但不同時存在于兩個操作數(shù)中,二進制異或運算符復制一位到結果中。 (a ^b) 將得到 49,二進制為 0011 0001
~ 二進制反碼運算符是一元運算符,具有"翻轉"位效果,即0變成1,1變成0。 (~$a ) 將得到 -61 ,二進制為 1100 0011 ,一個有符號二進制數(shù)的反碼形式。
<< 二進制左移運算符。左操作數(shù)的值向左移動右操作數(shù)指定的位數(shù)。 $a << 2 將得到 240 ,二進制為 1111 0000
>> 二進制右移運算符。左操作數(shù)的值向右移動右操作數(shù)指定的位數(shù)。 $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";

以上程序執(zhí)行輸出結果為:

$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。

運算符 描述 實例
and 邏輯與運算符符。如果兩個操作數(shù)都為 true,則條件為 true。 (a andb) 為 false。
&& C 風格的邏輯與運算符符。如果兩個操作數(shù)都為 true,則條件為 true (a &&b) 為 false。
or 邏輯或運算符。如果兩個操作數(shù)中有任意一個非零,則條件為 true。 (a orb) 為 true。
|| C 風格邏輯或運算符。如果兩個操作數(shù)中有任意一個非零,則條件為 true。 ($a $b) 為 true。
not 邏輯非運算符。用來反轉操作數(shù)的邏輯狀態(tài)。如果條件為 true,則邏輯非運算符將使其為 false。 not(a andb) 為 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";

以上程序執(zhí)行輸出結果為:

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

引號運算

Perl 引號運算符如下表所示。

運算符 描述 實例
q{ } 為字符串添加單引號 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 命令執(zhí)行
$t = qx{date};
print "qx{date} = $t\n";

以上程序執(zhí)行輸出結果為:

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 運算符返回字符串重復的次數(shù)。 ('-' x 3) 輸出為 ---。
.. .. 為范圍運算符。 (2..5) 輸出結果為 (2, 3, 4, 5)
++ 自增運算符,整數(shù)值增加 1 a =10,a++ will 輸出為 11
-- 自減運算符,整數(shù)值減少 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 執(zhí)行 \$a++ = $c\n";
 
$b--;
$c = $b ;
print "\$b 執(zhí)行 \$b-- = $c\n";

以上程序執(zhí)行輸出結果為:

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

運算符優(yōu)先級

下表列出了 Perl 語言的運算符優(yōu)先級:

運算符符 結合性
++, --
-, ~, ! 從右到左
** 從右到左
=~, !~ 從左到右
*, /, %, 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;
$e;
 
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";

以上程序執(zhí)行輸出結果為:

$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
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容