天天看點

Perl 運算符

運算符是一種告訴編譯器執行特定的數學或邏輯操作的符号,如: 3+2=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 次方

#!/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";

以上程式執行輸出結果為:

==

檢查兩個操作數的值是否相等,如果相等則條件為 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。

if( $a == $b ){

print "$a == \$b 結果 true\n";

}else{

print "\$a == \$b 結果 false\n";

}

if( $a != $b ){

print "\$a != \$b 結果 true\n";

print "\$a != \$b 結果 false\n";

$c = $a <=> $b;

print "\$a <=> \$b 傳回 $c\n";

if( $a > $b ){

print "\$a > \$b 結果 true\n";

print "\$a > \$b 結果 false\n";

if( $a >= $b ){

print "\$a >= \$b 結果 true\n";

print "\$a >= \$b 結果 false\n";

if( $a < $b ){

print "\$a < \$b 結果 true\n";

print "\$a < \$b 結果 false\n";

if( $a <= $b ){

print "\$a <= \$b 結果 true\n";

print "\$a <= \$b 結果 false\n";

以下表格執行個體中設定變量 $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。

$a = "abc";

$b = "xyz";

print "\$a = $a ,\$b = $b\n";

if( $a lt $b ){

print "$a lt \$b 傳回 true\n";

print "\$a lt \$b 傳回 false\n";

if( $a gt $b ){

print "\$a gt \$b 傳回 true\n";

print "\$a gt \$b 傳回 false\n";

if( $a le $b ){

print "\$a le \$b 傳回 true\n";

print "\$a le \$b 傳回 false\n";

if( $a ge $b ){

print "\$a ge \$b 傳回 true\n";

print "\$a ge \$b 傳回 false\n";

if( $a ne $b ){

print "\$a ne \$b 傳回 true\n";

print "\$a ne \$b 傳回 false\n";

$c = $a cmp $b;

print "\$a cmp \$b 傳回 $c\n";

=

簡單的指派運算符,把右邊操作數的值賦給左邊操作數

$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

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 = 60,$b = 13,現在以二進制格式表示,它們如下所示:

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

&

如果同時存在于兩個操作數中,二進制 AND 運算符複制一位到結果中。

($a & $b) 将得到 12,二進制為 0000 1100

|

如果存在于任一操作數中,二進制 OR 運算符複制一位到結果中。

($a | $b) 将得到 61 ,二進制為 0011 1101

^

如果存在于其中一個操作數中但不同時存在于兩個操作數中,二進制異或運算符複制一位到結果中。

($a ^ $b) 将得到 49,二進制為 0011 0001

~

二進制反碼運算符是一進制運算符,具有"翻轉"位效果,即0變成1,1變成0。

(~$a ) 将得到 -61 ,二進制為 1100 0011 ,一個有符号二進制數的反碼形式。

<<

二進制左移運算符。左操作數的值向左移動右操作數指定的位數。

$a << 2 将得到 240 ,二進制為 1111 0000

>>

二進制右移運算符。左操作數的值向右移動右操作數指定的位數。

$a >> 2 将得到 15 ,二進制為 0000 1111

use integer;

$a = 60;

$b = 13;

$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";

Perl 邏輯運算符如下表所示。

表格執行個體中我們設定變量 $a 為 true, $b 為 false。

and

邏輯與運算符符。如果兩個操作數都為 true,則條件為 true。

($a and $b) 為 false。

&&

C 風格的邏輯與運算符符。如果兩個操作數都為 true,則條件為 true

($a && $b) 為 false。

or

邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為 true。

($a or $b) 為 true。

||

C 風格邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為 true。

($a || $b) 為 true。

not

邏輯非運算符。用來反轉操作數的邏輯狀态。如果條件為 true,則邏輯非運算符将使其為 false。

not($a and $b) 為 true。

$a = true;

$b = false;

$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";

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

q{ }

為字元串添加單引号

q{abcd} 結果為 'abcd'

qq{ }

為字元串添加雙引号

qq{abcd} 結果為 "abcd"

qx{ }

為字元串添加反引号

qx{abcd} 結果為 `abcd`

$b = q{a = $a};

print "q{a = \$a} = $b\n";

$b = qq{a = $a};

print "qq{a = \$a} = $b\n";

# 使用 unix 的 date 指令執行

$t = qx{date};

print "qx{date} = $t\n";

除了以上我們提到的運算符外,Perl 還支援以下運算符:

.

點号 (.) 用于連接配接兩個字元串。

如果 $a="run", $b="oob" , $a.$b 結果為 "runoob"

x

x 運算符傳回字元串重複的次數。

('-' x 3) 輸出為 ---。

..

.. 為範圍運算符。

(2..5) 輸出結果為 (2, 3, 4, 5)

++

自增運算符,整數值增加 1

$a =10, $a++ 輸出為 11

--

自減運算符,整數值減少 1

$a =10, $a-- 輸出為 9

->

箭号用于指定一個類的方法

$obj->$a 表示對象 $obj 的 $a 方法。

$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";

$b = 15;

$a++;

$c = $a ;

print "\$a 執行 \$a++ = $c\n";

$b--;

$c = $b ;

print "\$b 執行 \$b-- = $c\n";

下表列出了 Perl 語言的運算符優先級:

運算符符

結合性

++, --

-, ~, !

從右到左

=~, !~

從左到右

*, /, %, x

+, -, .

<<, >>

-e, -r,

<, <=, >, >=, lt, le, gt, ge

==, !=, <=>, eq, ne, cmp

|, ^

? and :

=, +=, -=, *=,

其他

,

or, xor

$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";