Perl/演算子

演算子とは、1つ以上のオペランドを伴って式を構成する構文要素です。 オペランドの数によって、単項演算子・二項演算子・三項演算子に分類されます。 同じ記号を使っても、単項演算子だったり二項演算子であったりする演算子もあります。 問えば、符号反転-$xと減算$x - $y は、同じ記号 - を使います。 さらに、デクリメント--$x も、同じ記号 - を使います(--で1つのトークンで間に空白などは入れられません)。
また。Perlの演算子は、オペランドの型を演算子の想定する型に強制的に型変換され演算が行われます。
演算子の優先順位と結合性は、Perlでは概ね数学の世界と同じように機能します。
演算子の優先順位は、ある演算子が他の演算子よりも強くグループ化されることを意味します。たとえば、2 + 4 * 5 の場合、乗算の方が優先順位が高いので、2 + 4 が乗算の左側のオペランドとしてグループ化されるよりも、4 * 5 が加算の右側のオペランドとしてグループ化されます。つまり、式は (2 + 4) * 5 ではなく、2 + (4 * 5) と書かれるようなもので、6 * 5 == 30 ではなく、2 + 20 == 22 となります。
LEFT OP= 右 の形式の演算子は、LEFT = LEFT OP 右 と等価です。 OP= で1つのトークンです。OP と = の間に空白や改行があってはいけません。

Perlでは、演算子が決まるとオペランドの型が確定するのですが、インクリメントは例外で、数値のときは $x++ ⇒ $x += 1 ⇒ $x = $x + 1 ですが、文字列を渡すと一風変わった挙動をします。
.(ピリオド)は、文字列同士を連結して別の文字列を返す演算子、文字列連結演算子です。
x は、繰返し演算子です。 Perlにしては珍しく、オペランドによって演算内容と返す型が変わります。
q/STRING/は、文字列リテラルを表します。 変数と式の展開は、行なわれません。 ’(シングルクオーテーション)で囲まれた文字列リテラルに相当しますが、’を\(バックスラッシュ)でエスケープする必要はありません。 \の変換規則は、下記の実行結果のように変則的です。
qq/STRING/は、文字列リテラルを表します。 変数と式の展開が、行なわれます。 "(ダブルクオーテーション)で囲まれた文字列リテラルに相当しますが、”をエスケープする必要はありません。 \の変換規則は、下記の実行結果のように変則的です。
qw/STRING/は、空白および改行で区切られた文字列を、文字リテラルを要素とするリストを表します。 変数と式の展開は、行なわれません。 対応する他のリテラル表現がありませんが、概ね
よくある間違えとしては、セパレーターとして ,(カンマ)を使ってしまったり、(複数行のqw/STRING/で)#(井桁)をコメントになると期待してしまうことです。 これは、use warnings;か、use v5.36.0; warnings プラグマを有効にすることで警告を受けます(Perl5.36.0以降は warnings プラグマが標準で有効で、無効にするには no warnings; とします)。
正規表現リテラルの一般化
バッククォートリテラルの一般化
行指向のクォートの形式は、シェルのヒアドキュメント構文に基づくものです。 << の後に引用を終了する文字列を指定すると、現在の行から終了文字列までのすべての行が、その項目の値となります。
終了文字列の前に ~ を付けると、「インデント付きHere-docs」を使用することを指定します。
終了文字列は、識別子(単語)か、引用符で囲まれたテキストのどちらかです。 引用符で囲まれていない識別子は二重引用符のように機能します。 <<と識別子の間には、識別子が明示的に引用されていない限り、スペースを入れてはいけません。 終端文字列は,終端行に単独で (引用せず,周囲に空白を入れずに) 表示されなければなりません。
終了文字列が引用されている場合、使用される引用符の種類によって、そのテキストの扱いが決まります。
任意のサイズのビット列( Bitstring )は、ビット演算子(~ | & ^)で操作することができる。
ビットごとの否定を返します。
ビットごとの論理和(or)を返します。
ビットごとの論理積(and)を返します。
ビットごとの排他的論理和(xor)を返します。
オペランドを文字列に強制するバージョンのビット演算子(~. |. &. ^.)です。
オペランドを文字列に強制し、ビットごとの否定を返します。
オペランドを文字列に強制し、ビットごとの論理和(or)を返します。
オペランドを文字列に強制し、ビットごとの論理積(and)を返します。
オペランドを文字列に強制し、ビットごとの排他的論理和(xor)を返します。
右ビットシフトを行います。
左ビットシフトを行います。
論理演算子式は、典型的にはif文などの条件式に使われますが、短絡評価するため制御構造としても機能します。 || と or、&& と and、! と not は別名関係にありますが、or,and,notの方が優先順位が低いことが違います。「単語より演算子らしい記号のほうが強い」とおぼえてください。
||は、論理和を返す二項演算子です。
or は、優先度が低いバージョンの || 演算子です。
論理和は左引数が偽である場合のみ右引数の評価を行います。 このような論理演算子の実質的に制御構造としての振る舞いを「短絡評価」とよびます。 論理和はまた、最後に評価された値を返すので例外処理にも使われます。 このとき or の優先度が低いことが役に立ちます。
&&は、論理積を返す二項演算子です。
and は、優先度が低いバージョンの && 演算子です。
論理積も短絡評価を行います。
この // は、正規表現のそれではなく / 2文字からなるトークンで、|| とよく似ていますが、左辺が定義さていれば左辺を、定義されていなければ右辺を返します。オプショナルな引数の定義状況のテストを意図されています。
を
と簡素に書くことができます。
// は、5.10 で追加されました。
notは、与えられた論理式の否定を表します。Aが真のとき、not A は偽です。Aが偽のとき、not A は真です。
! は、優先度が高いバージョンの not 演算子です。
不等号を表すのに利用します。
比較演算子は数値の他、文字列にも 数学記号の ≦ と <= は同じ意味ですが、パソコンの直接入力(半角英数)には ≦ が無いので、プログラミングでは <= で代用されます。 これは、Cも同様です(PerlがCを模倣したのですが)。 Fortranの様にASCIIコードが制定される前の言語では '<' がキャラクターセットになかったり文字のサポートがまちまちだったので、.EQ.,.NE.,.GT.,.LT.,.GE.,.LE.,.AND.,.OR.,.NOT. のように演算子の頭文字をドット. で囲み表現しました。 Perlの文字列の比較演算子も概ねFortranの記法にならっています。
同じ数値であることや、違う数値であることを表すのに使用されます。両辺の変数などの内容を(文字列ではなく)数値として評価します。
== は、両辺の値が等しい事を要求します。if文の中でよく使います。
(Perlに限らずC言語などでも、)よくあるミスで、「=」と記号をひとつだけにするミスがありますが、これはエラーになるか、または代入演算子として解釈されるのでバグになります。
!= は 両辺の値が等しくない事を要求します。つまり、!= は両辺の値が違っている事を要求します。
等しくない場合の != では、否定の記号 ! が先に来ます。(Perl にかぎらずC言語など他のプログラム言語でも、同様の順序です。)
左右の数値の大小関係により -1, 0, 1 のいずれかを返します。これは主にsortで使われます。
両辺の文字列が、文字列として評価した場合に、同じ値かを調べるときに使用します。
なお、== および != は両辺が数値として評価した場合なので、意味が違います。
Perlには変数に型が無いので、C言語とは異なり、比較演算子の側で、変数の内容を数値として評価するか、内容を文字列として評価するかの指定が必要になるのです。
eq は、両辺を文字列として比較したときに、両辺が同じであることを要求します。
なお「eq」とは equal (等号、等しい)の略であるとされる。
ne は、両辺を文字列として比較したときに、両辺が異なることを比較します。
「ne」とは not equal の略だとされる。

二つの文字列の辞書順での大小を比較します。
二つの文字列の辞書順での大小関係により-1, 0, 1のいずれかを返します。これは主にsortで使われます。

フリップフロップ演算子として .. が振る舞うときは癖が強いです
と等価です。
とも等価です。
PATTERNにマッチするものをSTRINGに置換します。PATTERNは正規表現です。
tr/PATTERN1/PATTERN2/ 1文字を対応する1文字に置換します。PATTERNには正規表現ではなく、文字クラス(角括弧で囲まれた文字クラスの[]の内側)を指定します。
ハイフンを使って範囲指定を行うことができます。
=~ を使わないと $_ の変換対象になり、変換した文字数を返します。
->は、中置のデリファレンス演算子で、左辺のリファレンスに対し、右辺のフォームによりそれぞれ
を参照します。
y/PATTERN1/PATTERN2/ tr///の同義語です。
Perl には、秘密の演算子( secret operators )と呼ばれる一連の独特の記法があります。 これらは実際には演算子ではないのですが、高い頻度でコード上に登場するので愛称がつけられたものです。
ビーナス演算子は、式を強制的に数値化します。
ベビーカー演算子は、文字列の内部でリスト補間を行います。リスト項目は、$"の値で区切られます。
[TODO:例]