Perl 演算子


演算子は、3+2=5 などの特定の数学的演算または論理演算を実行するようにコンパイラーに指示する記号です。

Perl 言語には豊富な演算子が組み込まれています。一般的に使用される演算子をいくつか見てみましょう:

  • 算術演算子

  • 比較演算子

  • 論理演算子

  • 代入演算子

  • ビット演算子

  • 引用演算子

  • その他の演算子

  • 演算子の優先順位


算術演算子

テーブルの例では、変数 $a を 10 に設定し、$b は 20 に設定します。

%動作、除算後の余り$b % $a の結果は 0** 乗$a**$b となり、結果は 10 の 20 乗になります
演算子説明
+加算演算$a + $b 結果は30
-減算演算 $ a - $b の結果は - 10
*乗算演算$a * $bの結果は200
/除算演算$b / $aの結果は2

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


比較演算子

テーブルの例では、変数 $a を 10 に、$b を 20 に設定します。

OperatorDescriptionInstance== 2 つのオペランドの値が等しいかどうかをチェックし、等しい場合は条件が true、それ以外の場合は false です。 ($a == $b) is false!=は、2 つのオペランドの値が等しいかどうかをチェックし、等しくない場合は条件が true、等しくない場合は false になります。 ($a != $b) は true です。 <=> 2 つのオペランドの値が等しいかどうかを確認し、左側の数値が右側の数値より小さい場合は -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 を返します。

#!/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" に設定し、比較演算子を使用して計算します。結果。

OperatorDescriptionInstance
lt左側の文字列が右側の文字列より小さいかどうかを確認し、小さい場合は true を返し、そうでない場合は false を返します。 ($a lt $b) は true を返します。
gt 左側の文字列が右側の文字列より大きいかどうかを確認し、大きい場合は true を返し、そうでない場合は false を返します。 ($a gt $b) は false を返します。
le左側の文字列が右側の文字列以下であるかどうかを確認し、そうであれば true を返し、それ以外の場合は false を返します。 ($a le $b) returns true
ge左側の文字列が右側の文字列以上であるかどうかを確認し、そうであればtrueを返し、それ以外の場合はfalseを返します。 ($a ge $b) は false を返します。
eq 左側の文字列が右側の文字列と等しいかどうかを確認し、等しい場合は true を返し、そうでない場合は false を返します。 ($a eq $b) は false を返します。
左側の文字列が右側の文字列と等しくないかを確認し、等しければtrueを返し、等しくない場合はfalseを返します。 ($a ne $b) は true を返します
cmp 左側の文字列が右側の文字列より大きい場合は 1 を返し、等しい場合は 0 を返し、文字列が次の場合は 0 を返します。左側の文字列が右側の文字列より小さい場合は、-1 を返します。 ($a cmp $b) は -1 を返します。

#!/usr/bin/perl
 
$a = "abc";
$b = "xyz";

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

if( $a lt $b ){
   print "$a lt $b 返回 true\n";
}else{
   print "$a lt $b 返回 false\n";
}

if( $a gt $b ){
   print "$a gt $b 返回 true\n";
}else{
   print "$a gt $b 返回 false\n";
}

if( $a le $b ){
   print "$a le $b 返回 true\n";
}else{
   print "$a le $b 返回 false\n";
}

if( $a ge $b ){
   print "$a ge $b 返回 true\n";
}else{
   print "$a ge $b 返回 false\n";
}

if( $a ne $b ){
   print "$a ne $b 返回 true\n";
}else{
   print "$a ne $b 返回 false\n";
}

$c = $a cmp $b;
print "$a cmp $b 返回 $c\n";

上記のプログラムの実行出力は次のとおりです:

$a = abc ,$b = xyz
abc lt $b 返回 true
$a gt $b 返回 false
$a le $b 返回 true
$a ge $b 返回 false
$a ne $b 返回 true
$a cmp $b 返回 -1

代入演算子

テーブルの例では、変数 $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
%= モジュロと代入演算子、2 つのオペランドのモジュロを見つけて、それを左のオペランドに代入します $c %= $a は $c = $c % a
**=べき乗と代入演算子。2 つのオペランドのべき乗を求め、それを左のオペランドに代入します$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 でサポートされているビット演算子を以下の表に示します。

テーブルの例では、変数 $a を true に設定し、$b を false に設定します。
OperatorDescription Example
& 両方のオペランドに存在する場合、バイナリ AND 演算子は 1 ビットを結果にコピーします。 ($a & $b) は 12 を返します。これは 2 進数では 0000 1100 です
| どちらかのオペランドに存在する場合、2 進 OR 演算子は 1 ビットを結果にコピーします。 ($a | $b) は 61 を取得します。これは、バイナリでは 0011 1101 です
^ オペランドの一方に存在し、両方には存在しない場合、バイナリ XOR 演算子は 1 つを結果にコピーします。 ($a ^ $b) は 49 を返します。これは 2 進数では 0011 0001 です
~ 2 の補数演算子は、ビットを「反転」する効果がある単項演算子です。 (~$a ) は -61 を返します。これは、2 進数、2 の補数、符号付き 2 進数で 1100 0011 です。
<<二項左シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ左にシフトされます。 $a << 2 は 240 を取得します。これは 2 進数で 1111 0000 になります
>> 2 進右シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ右にシフトされます。 $a >> 2 は 15 を取得します。これは、バイナリで 0000 1111 になります。

演算子


説明

and論理AND演算子。両方のオペランドが true の場合、条件は true になります。 C スタイルの論理 AND 演算子。両方のオペランドが true の場合、条件は true になります論理OR演算子。 2 つのオペランドのいずれかが 0 以外の場合、条件は true になります。 C スタイルの論理 OR 演算子。 2 つのオペランドのいずれかが 0 以外の場合、条件は true になります。 論理否定演算子。オペランドの論理状態を反転するために使用されます。条件が true の場合、論理 NOT 演算子により条件が false になります。
($a と $b) は false です。 &&
($a && $b) が false の場合。 or
($a または $b) は true です。 ||
($a || $b) は true です。 not
not($a と $b) は true です。

#!/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の引用符演算子を以下の表に示します。

OperatorDescriptionInstance
q{ }文字列q{abcd}に一重引用符を追加します。結果は「abcd」になります
qq{ } はキャラクター追加です文字列qq{abcd}を二重引用符で囲むと、結果は「abcd」になります
qx{ } 文字列qx{abcd}にバックティックを追加すると、結果は`abcd`になります

#!/usr/bin/perl
 
$a = true;
$b = false;

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

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

上記のプログラムの実行出力は次のとおりです:

$a = true , $b = false
$a and $b = false
$a && $b = false
$a or $b = true
$a || $b = true
not($a)= 1

その他の演算子

上記の演算子に加えて、Perl は次の演算子もサポートしています:

OperatorDescriptionInstance
. ドット (.) は 2 つの文字列を連結するために使用されます。 If $a="run", $b="oob" 、 $a.$b の結果は "php" になります
xx 演算子は文字列が繰り返される回数を返します。 ('-' x 3) の出力は ---。
.... は範囲演算子です。 (2..5) 出力結果は (2, 3, 4, 5) です
++インクリメント演算子、整数値は 1 ずつ増加します$a =10、$a++ は 11 を出力します
--デクリメント演算子、整数値は1だけ減らされます$a =10, $a--出力は9です
->矢印は、次の方法を指定するために使用されますクラス $obj->$a は、オブジェクト $obj の $a メソッドを表します。

#!/usr/bin/perl
 
$a = 10;
 
$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";

上記のプログラムの実行出力は次のとおりです:

q{a = $a} = a = $a
qq{a = $a} = a = 10
qx{date} = 2016年 6月10日 星期五 16时22分33秒 CST

演算子の優先順位

次の表は、Perl言語の演算子の優先順位を示しています:

Operator Operator結合性
++, --なし
-、~、!右から左へ
**右から左へ
=~、!~左から右へ
*、/、%、x左から右
+、-、.左から右
<<、>>左から右
-e、-r、なし
<、<=、>、>=、lt、le、gt、ge左から右へ
==、! =、<=>、eq、ne、cmp左から右へ
&左から右へ
|、^左から右へ
&&左から右へ
||左から右へ
...左から右へ
=、+=、-=、*=、から?右から左へ
他の
左から右へ
ではない左から右へ
左から右へ
または、