Perl 運算符
運算子是一種告訴編譯器執行特定的數學或邏輯運算的符號,如: 3+2=5。
Perl 語言內建了豐富的運算符,我們來看下常用的幾種:
算術運算子
比較運算子
邏輯運算子
#賦值運算子
位元運算子
引號運算子
其他運算子
運算子優先權
算術運算子
表格實例中我們設定變數$a 為10, $b 為20。
運算子 | #描述 | #實例 |
---|---|---|
$a + $b 結果為30 | - | |
$a - $b 結果為-10 | * | |
#$a * $b 結果為200 | ##/ | 除法運算 |
#% | 求餘運算,整除後的餘數 | |
** | #冪 |
#!/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";
以上程式執行輸出結果為:
$a = 10 , $b = 20 $a + $b = 30 $a - $b = -10 $a * $b = 200 $a / $b = 0.5 $a % $b = 10 $a ** $b = 16比較運算子
運算子 | 描述 | |
---|---|---|
##== | ||
#檢查兩個操作數的值是否相等,若相等則條件為true,否則為false。 | ($a == $b) 為false | |
!= | 檢查兩個運算元的值是否相等,如果不相等則條件為true,否則為false。 | ($a != $b) 為 true。 |
<=> | 檢查兩個運算元的值是否相等, 如果左邊的數小於右邊的數回傳-1,如果相等回傳0,如果左邊的數大於右邊的數回傳1 。 | ($a <=> $b) 回傳 -1。 |
> | 檢查左運算元的值是否大於右邊操作數的值,如果是則條件為 true,否則為 false。 | ($a > $b) 傳回 false。 |
< | 檢查左運算元的值是否小於右邊操作數的值,如果是則條件為 true,否則傳回 false。 | ($a < $b) 傳回 true。 |
>= | 檢查左運算元的值是否大於或等於右運算元的值,如果是條件為 true,否則傳回 false。 | ($a >= $b) 傳回 false。 |
實例
#!/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"; }
以上程式執行輸出結果為:
$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" ,然後使用比較運算符來計算結果。
運算子 | 描述 | #實例 | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#檢查左邊的字串是否小於右邊的字串,如果是回傳true,否則回傳false。 | ($a lt $b) 傳回 true。 | |||||||||||||||||||||||||||||||||||||||||||||||
檢查左邊的字串是否大於右邊的字串,如果是傳回 true,否則傳回 false。 | ($a gt $b) 傳回 false。 | |||||||||||||||||||||||||||||||||||||||||||||||
檢查左邊的字串是否小於或等於右邊的字串,如果是傳回 true,否則傳回 false。 | ($a le $b) 傳回true | |||||||||||||||||||||||||||||||||||||||||||||||
檢查左邊的字串是否大於或等於右邊的字串,如果是傳回true,否則回傳false。 | ($a ge $b) 傳回 false。 | |||||||||||||||||||||||||||||||||||||||||||||||
檢查左邊的字串是否等於右邊的字串,如果是傳回 true,否則傳回 false。 | ($a eq $b) 傳回 false。 | |||||||||||||||||||||||||||||||||||||||||||||||
檢查左邊的字串是否不等於右邊的字串,如果是傳回 true,否則傳回 false。 | ($a ne $b) 傳回true | |||||||||||||||||||||||||||||||||||||||||||||||
如果左邊的字串大於右邊的字串回傳1,如果相等回傳0,如果左邊的字串小於右邊的字串回傳-1。 | ($a cmp $b) 回傳 -1。 |
運算子 | #描述 | #實例 |
---|---|---|
##簡單的賦值運算符,把右邊運算元的值賦給左邊運算元 | $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 |
實例
#!/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";
以上程式執行輸出結果為:
$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 | |
二進位補碼運算子是一元運算符,具有"翻轉"位元效果。 | (~$a ) 將得到 -61 ,二進位為 1100 0011 ,2 的補碼形式,帶符號的二進位數。 | |
二進位左移運算子。左操作數的值向左移動右操作數所指定的位數。 | $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。 |
運算子 | #描述 | #實例 |
---|---|---|
為字串新增單引號 | q{abcd} 結果為'abcd' | |
##為字串新增雙引號 | qq{abcd} 結果為"abcd" | |
為字串新增反引號 | ##qx{ abcd} 結果為`abcd`
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 結果為"php" | x | |||||||||||||||||||||||||||||||||||||||||||||||
('-' x 3) 輸出為 ---。 | .. | |||||||||||||||||||||||||||||||||||||||||||||||
(2..5) 輸出結果為(2, 3, 4, 5) | #++ | |||||||||||||||||||||||||||||||||||||||||||||||
$a =10, $a++ will 輸出為11 | #-- | |||||||||||||||||||||||||||||||||||||||||||||||
$a =10, $a-- 輸出為9 | -> | |||||||||||||||||||||||||||||||||||||||||||||||
$obj->$a 表示物件$obj 的$a 方法。 |
運算子 | 結合性 |
---|---|
++, -- | 無 |
-, ~, ! | 從右到左 |
** | 從右向左 |
=~, !~ | 由左至右 |
*, /, %, x | 由左至右 |
+, -, . | #從左到右 |
<< , >> | 由左至右 |
-e, -r, | 無 |
#<, <=, >, >=, lt, le, gt, ge | |
#==, != , <=>, eq, ne, cmp | |
& | ##從左至右|
|, ^ | 由左至右 |
#&& | #從左到右 |
|| | |
.. | |
? and : | |
#=, +=, -=, *=, | |
其他 |
#!/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";###以上程式執行輸出結果為:###
$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###