一、算術(shù)操作符 :+(加)、-(減)、*(乘)、/(除)、**(乘冪)、%(取余)、-(單目負(fù))
??(1)乘冪的基數(shù)不能為負(fù),如 (-5) ** 2.5 # error;
??(2)乘冪結(jié)果不能超出計算機表示的限制,如10 ** 999999 # error
??(3)取余的操作數(shù)如不是整數(shù),四舍五入成整數(shù)后運算;運算符右側(cè)不能為零
??(4)單目負(fù)可用于變量: - $y ; # 等效于 $y * -1
二、整數(shù)比較操作符
?
?
Table 3.1. 整數(shù)比較操作符
| 操作符 | 描述 |
| ? | 小于 |
| > | 大于 |
| == | 等于 |
| ? | 小于等于 |
| >= | 大于等于 |
| != | 不等于 |
| ? | 比較,返回 1, 0, or -1 |
操作符結(jié)果為:
??0 - 兩個值相等
??1 - 第一個值大
??1 - 第二個值大
三、字符串比較操作符
?
Table 3.2. 字符串比較操作符
| 操作符 | 描述 | |
| lt | 小于 | |
| gt | 大于 | |
| eq | 等于 | |
| le | 小于等于 | |
| ge | 大于等于 | |
| ne | 不等于 | |
| cmp | 比較,返回 1, 0, or -1 |
四、邏輯操作符
??邏輯或:$a || $b 或 $a or $b
??邏輯與:$a && $b 或 $a and $b
??邏輯非:! $a 或 not $a
??邏輯異或:$a xor $b
五、位操作符
??位與:&
??位或:|
??位非:~
??位異或:^
??左移:$x ??右移:$x >> 2
??注:不要將&用于負(fù)整數(shù),因為PERL將會把它們轉(zhuǎn)化為無符號數(shù)。
六、賦值操作符
?
Table 3.3. 賦值操作符
| 操作符 | 描述 |
| = | Assignment only |
| += | Addition and assignment |
| -= | Subtraction and assignment |
| *= | Multiplication and assignment |
| /= | Division and assignment |
| %= | Remainder and assignment |
| **= | Exponentiation and assignment |
| &= | Bitwise AND and assignment |
| |= | Bitwise OR and assignment |
| ^= | Bitwise XOR and assignment |
?
Table 3.4. 賦值操作符例子
| 表達(dá)式 | 等效表達(dá)式 |
| $a = 1; | none (basic assignment) |
| $a -= 1; | $a = $a - 1; |
| $a *= 2; | $a = $a * 2; |
| $a /= 2; | $a = $a / 2; |
| $a %= 2; | $a = $a % 2; |
| $a **= 2; | $a = $a ** 2; |
| $a &= 2; | $a = $a & 2; |
| $a |= 2; | $a = $a | 2; |
| $a ^= 2; | $a = $a ^ 2; |
.=可在一個賦值語句中出現(xiàn)多次,如:
??$value1 = $value2 = "a string";
.=作為子表達(dá)式
??($a = $b) += 3;
??等價于
??$a = $b;
??$a += 3;
??但建議不要使用這種方式。
七、自增自減操作符 :++、--(與C++中的用法相同)
.不要在變量兩邊都使用此種操作符:++$var-- # error
.不要在變量自增/減后在同一表達(dá)式中再次使用:$var2 ??= $var1 + ++$var1; # error
.在PERL中++可用于字符串,但當(dāng)結(jié)尾字符為'z'、'Z'、'9'時進位,如:
??$stringvar = "abc";
??$stringvar++; # $stringvar contains "abd" now
??$stringvar = "aBC";
??$stringvar++; # $stringvar contains "aBD" now
??$stringvar = "abz";
??$stringvar++; # $stringvar now contains "aca"
??$stringvar = "AGZZZ";
??$stringvar++; # $stringvar now contains "AHAAA"
??$stringvar = "ab4";
??$stringvar++; # $stringvar now contains "ab5"
??$stringvar = "bc999";
??$stringvar++; # $stringvar now contains "bd000"
.不要使用--,PERL將先將字符串轉(zhuǎn)換為數(shù)字再進行自減
??$stringvar = "abc";
??$stringvar--; # $stringvar = -1 now
.如果字符串中含有非字母且非數(shù)字的字符,或數(shù)字位于字母中,則經(jīng)過++運算前值轉(zhuǎn)換為數(shù)字零,因此結(jié)果為1,如:
??$stringvar = "ab*c";
??$stringvar++;
??$stringvar = "ab5c";
??$stringvar++;
八、字符串聯(lián)結(jié)和重復(fù)操作符
??聯(lián)接: .
??重復(fù):x
??聯(lián)接且賦值(類似+=): .=
例:
??$newstring = "potato" . "head";
??$newstring = "t" x 5;
??$a = "be";
??$a .= "witched"; # $a is now "bewitched"
九、逗號操作符
??其前面的表達(dá)式先進行運算,如:
??$var1 += 1, $var2 = $var1;
??等價于
??$var1 += 1;
??$var2 = $var1;
??使用此操作符的唯一理由是提高程序的可讀性,將關(guān)系密切的兩個表達(dá)式結(jié)合在一起,如:
??$val = 26;
??$result = (++$val, $val + 5); # $result = 32
??注意如果此處沒有括號則意義不同:
??$val = 26;
??$result = ++$val, $val + 5; # $result = 27
十、條件操作符
??與C中類似,條件?值1:值2,當(dāng)條件為真時取值1,為假時取值2,如:
??$result = $var == 0 ? 14 : 7;
??$result = 43 + ($divisor == 0 ? 0 : $dividend / $divisor);
??PERL 5中,還可以在賦值式左邊使用條件操作符來選擇被賦值的變量,如:
??$condvar == 43 ? $var1 : $var2 = 14;
??$condvar == 43 ? $var1 = 14 : $var2 = 14;
十一、操作符的次序
?
Table 3.6. 操作符次序
| 操作符 | 描述 |
| ++, -- | 自增,自減 |
| -, ~, ! | 單目 |
| ** | 乘方 |
| =~, !~ | 模式匹配 |
| *, /, %, x | 乘,除,取余,重復(fù) |
| +, -, . | 加,減,聯(lián)接 |
| , >> | 移位 |
| -e, -r, etc. | 文件狀態(tài) |
| , , >, >=, lt, le, gt, ge | 不等比較 |
| ==, !=, , eq, ne, cmp | 相等比較 |
| & | 位與 |
| |, ^ | 位或,位異或 |
| && | 邏輯與 |
| || | 邏輯或 |
| .. | 列表范圍 |
| ? and : | 條件操作符 |
| =, +=, -=, *=, | 賦值 |
| and so on | |
| , | 逗號操作符 |
| not | Low-precedence logical NOT |
| and | Low-precedence logical AND |
| or, xor | Low-precedence logical OR and XOR |
.操作符結(jié)合性(associativity):
Table 3.7. 操作符結(jié)合性
| 操作符 | 結(jié)合性 |
| ++, -- | 無 |
| -, ~, ! | Right-to-left |
| ** | Right-to-left |
| =~, !~ | Left-to-right |
| *, /, %, x | Left-to-right |
| +, -, . | Left-to-right |
| , >> | Left-to-right |
| -e, -r, | 無 |
| , , >, >=, lt, le, gt, ge | Left-to-right |
| ==, !=, , eq, ne, cmp | Left-to-right |
| & | Left-to-right |
| |, ^ | Left-to-right |
| && | Left-to-right |
| || | Left-to-right |
| .. | Left-to-right |
| ? and : | Right-to-left |
| =, +=, -=, *=, | Right-to-left |
| and so on | |
| , | Left-to-right |
| not | Left-to-right |
| and | Left-to-right |
| or, xor | Left-to-right |
建議:
??1、當(dāng)你不確定某操作符是否先執(zhí)行時,一定要用括號明確之。
??2、用多行、空格等方式提高程序的可讀性。
以上就是關(guān)于perl操作符用法詳解,感謝大家的閱讀,更多內(nèi)容請關(guān)注武林技術(shù)頻道網(wǎng)站。
新聞熱點
疑難解答
圖片精選