Perl - 第十章 | Perl 運算符
什麼是運算符?
可以使用表達式4 + 5等於9給出簡單答案。這裡的4和5稱為操作數,而+稱為運算符。Perl語言支持多種運算符類型,但以下是重要且最常用的運算符列表:
- 算術運算符
- 平等經營者
- 邏輯運算符
- 賦值運算符
- 按位運算符
- 邏輯運算符
- 類引用運算符
- 雜項運算符
算術運算符
表格範例中我們設置變量$a 為10, $b 為20。
| 運算符 | 描述 | 範例 |
|---|---|---|
| + | 加法運算 | $a + $b 結果為30 |
| - | 減法運算 | $a - $b 結果為-10 |
| * | 乘法運算 | $a * $b 結果為200 |
| / | 除法運算 | $b / $a 結果為 2 |
| % | 求餘運算,整除後的餘數 | $b % $a 結果為 0 |
| ** | 乘冪 | $a**$b 結果為10 的20 次方 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = 10 , $b = 20 |
比較運算符
表格範例中我們設置變量 $a 為 10, $b 為 20。
| 運算符 | 描述 | 範例 |
|---|---|---|
| == | 檢查兩個操作數的值是否相等,如果相等則條件為 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。 |
| <= | 檢查左操作數的值是否小於或等於右操作數的值,如果是則條件為 true,否則返回 false。 | ($a <= $b) 返回 true。 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = 10 , $b = 20 |
以下表格範例中設置變量$a 為”abc”,$b 為”xyz”,然後使用比較運算符來計算結果。
| 運算符 | 描述 | 範例 |
|---|---|---|
| lt | 檢查左邊的字符串是否小於右邊的字符串,如果是返回true,否則返回false。 | ($a lt $b) 返回true。 |
| gt | 檢查左邊的字符串是否大於右邊的字符串,如果是返回true,否則返回false。 | ($a gt $b) 返回false。 |
| le | 檢查左邊的字符串是否小於或等於右邊的字符串,如果是返回true,否則返回false。 | ($a le $b) 返回true |
| ge | 檢查左邊的字符串是否大於或等於右邊的字符串,如果是返回true,否則返回false。 | ($a ge $b) 返回false。 |
| eq | 檢查左邊的字符串是否等於右邊的字符串,如果是返回true,否則返回false。 | ($a eq $b) 返回false。 |
| ne | 檢查左邊的字符串是否不等於右邊的字符串,如果是返回true,否則返回false。 | ($a ne $b) 返回true |
| cmp | 如果左邊的字符串大於右邊的字符串返回1,如果相等返回0,如果左邊的字符串小於右邊的字符串返回-1。 | ($a cmp $b) 返回-1。 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = abc ,$b = xyz |
賦值運算符
表格範例中我們設置變量 $a 為 10, $b 為 20。
| 運算符 | 描述 | 範例 |
|---|---|---|
| = | 簡單的賦值運算符,把右邊操作數的值賦給左邊操作數 | $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 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = 10 ,$b = 20 |
按位運算符
位運算符作用於位,並逐位執行操作。
設置$a = 60,$b = 13,現在以二進制格式表示,它們如下所示:
1 | $ a = 0011 1100 |
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 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = 60 , $b = 13 |
邏輯運算符
Perl 邏輯運算符如下表所示。
表格範例中我們設置變量 $a 為 true, $b 為 false。
| 運算符 | 描述 | 範例 |
|---|---|---|
| and | 邏輯與運算符符。如果兩個操作數都為 true,則條件為 true。 | ($a and $b) 為 false。 |
| && | C 風格的邏輯與運算符符。如果兩個操作數都為 true,則條件為 true。 | ($a && $b) 為 false。 |
| or | 邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為 true。 | ($a or $b) 為 true。 |
| not | 邏輯非運算符。用來反轉操作數的邏輯狀態。如果條件為 true,則邏輯非運算符將使其為 false。 | not($a and $b) 為 true。 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = true , $b = false |
引號運算
Perl 引號運算符如下表所示。
| 運算符 | 描述 | 範例 |
|---|---|---|
| q{ } | 為字符串添加單引號 q{abcd} | 結果為 'abcd' |
| qq{ } | 為字符串添加雙引號 qq{abcd} | 結果為 "abcd" |
| qx{ } | 為字符串添加反引號 qx{abcd} | 結果為 `abcd` |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | q{a = $a} = a = $a |
其他運算符
除了以上我們提到的運算符外,Perl 還支持以下運算符:
| 運算符 | 描述 | 範例 |
|---|---|---|
| . | 點號 (.) 用於連接兩個字符串。 | 如果 $a="abc", $b="edf" , $a.$b 結果為 "abcedf" |
| x | x 運算符返回字符串重複的次數。 | (‘-‘ x 3) 輸出為 —。 |
| .. | .. 為範圍運算符。 | (2..5) 輸出結果為 (2, 3, 4, 5) |
| ++ | 自增運算符,整數值增加 1 | $a =10, $a++ will 輸出為 11 |
| -- | 自減運算符,整數值減少 1 | $a =10, $a– 輸出為 9 |
| -> | 箭號用於指定一個類的方法 | $obj->$a 表示對象 $obj 的 $a 方法。 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = abc , $b = edf |
運算符優先級
下表列出了 Perl 語言的運算符優先級:
| 運算符符 | 結合性 |
|---|---|
| ++, -- | 無 |
| -, ~, ! | 從右到左 |
| ** | 從右到左 |
| =~, !~ | 從左到右 |
| *, /, %, x | 從左到右 |
| +, -, . | 從左到右 |
| <<, >> | 從左到右 |
| -e, -r, | 無 |
| <, <=, >, >=, lt, le, gt, ge | 從左到右 |
| ==, !=, <=>, eq, ne, cmp | 從左到右 |
| & | 從左到右 |
| |, ^ | 從左到右 |
| && | 從左到右 |
| || | 從左到右 |
| .. | 從左到右 |
| ? and : | 從右到左 |
| =, +=, -=, *=, | 從右到左 |
| 其他 | |
| , | 從左到右 |
| not | 從左到右 |
| and | 從左到右 |
| or, xor | 從左到右 |
範例:
1 | #!/usr/bin/perl |
這將產生以下結果:
1 | a = 20, $b = 10, $c = 15 ,$d = 5 |
註:以上參考了
Tutorialspoint, Perl - Operators