七、自增自減操作符 :++、--(與C++中的用法相同) .不要在變量兩邊都使用此種操作符:++$var-- # error .不要在變量自增/減后在同一表達式中再次使用:$var2 = $var1 + ++$var1; # error .在PERL中++可用于字符串,但當結尾字符為'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將先將字符串轉換為數字再進行自減 $stringvar = "abc"; $stringvar--; # $stringvar = -1 now
.如果字符串中含有非字母且非數字的字符,或數字位于字母中,則經過++運算前值轉換為數字零,因此結果為1,如: $stringvar = "ab*c"; $stringvar++; $stringvar = "ab5c"; $stringvar++; 八、字符串聯結和重復操作符 聯接: . 重復:x 聯接且賦值(類似+=): .= 例: $newstring = "potato" . "head"; $newstring = "t" x 5; $a = "be"; $a .= "witched"; # $a is now "bewitched" 九、逗號操作符 其前面的表達式先進行運算,如: $var1 += 1, $var2 = $var1; 等價于 $var1 += 1; $var2 = $var1; 使用此操作符的唯一理由是提高程序的可讀性,將關系密切的兩個表達式結合在一起,如: $val = 26; $result = (++$val, $val + 5); # $result = 32 注意如果此處沒有括號則意義不同: $val = 26; $result = ++$val, $val + 5; # $result = 27 十、條件操作符 與C中類似,條件?值1:值2,當條件為真時取值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 | 乘,除,取余,重復 | +, -, . | 加,減,聯接 | <<, >> | 移位 | -e, -r, etc. | 文件狀態 | <, <=, >, >=, 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 |
.操作符結合性(associativity):
Table 3.7. 操作符結合性
操作符 | 結合性 | ++, -- | 無 | -, ~, ! | 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、當你不確定某操作符是否先執行時,一定要用括號明確之。 2、用多行、空格等方式提高程序的可讀性。
|