Perlの関係演算子には、数値を扱う演算子と文字列演算子があります。
数値の比較 | 文字列の比較 | 意味 |
---|---|---|
== | eq | 等しい |
!= | ne | 等しくない |
> | gt | より大きい |
>= | ge | 以上 |
< | lt | より小さい |
<= | lt | 以下 |
<= | le | 以下 |
<=> | le | 等しくない |
cmp | ASCIIコードに基づく比較 |
cmpは末尾のスペースも比較の対象とします。左オペランドが大きいとき-1を、等しいときゼロを、右オペランドが大きいとき1を返します。
※関係演算子は結合しません。たとえば、以下の書き方は構文エラーになります。
$a < $b < $c
Perlにはファイルやディレクトリをテストするための便利な演算子が用意されています。
演算子 | 意味 |
---|---|
-r | 実効uidで読み込み可能 |
-w | 実効uidで書き込み可能 |
-x | 実効uidで実効可能 |
-o | オーナーが実効uid |
-R | uidで読み込み可能 |
-W | uidで書き込み可能 |
-X | uidで実行可能 |
-O | オーナーがuid |
-e | ファイルが存在 |
-z | ファイルが空でない(サイズを返す) |
-f | 通常ファイル |
-d | ディレクトリ |
-l | シンボリックリンク |
-p | 名前付きパイプ |
-S | ソケット |
-b | ブロックデバイス |
-c | キャラクタデバイス |
-u | setuidビットが立っている |
-g | setgidビットが立っている |
-k | stickyビットが立っている |
-t | ファイル指示子がtty |
-T | テキストファイル |
-B | バイナリファイル |
-M | ファイル作成時からスクリプト実行開始時までの日数 |
-A | ファイルアクセス時からスクリプト実行開始時までの日数 |
-C | iノード更新時からスクリプト実行開始時までの日数 |
以下のサンプルは -dファイル演算子を使って、ディレクトリ"./OUT"がすでに存在するか調べ、存在しなければ作成します。
$OUTDIR = "./OUT"; if ( !-d $OUTDIR ) { mkdir $OUTDIR; }
部分演算子「..」はコンテキストにより、2通りの意味を持ちます。
リストや配列が要求されるコンテキストでは、左辺の値を1つずつインクリメントしながら右辺の値になるまで並べたリストと等価に扱われます。
# 1から100までの和を計算する例 foreach $a ( 1..100 ) { $sum += $a; } # 以下の記述は('a','b','c')と等価 @alpha = ('a'..'c');
条件式では、左辺が真になった後、右辺が真になるまでの間、式の値が真となります。左辺、右辺のいずれかが定数であった場合は両辺は入力ファイルの行番号と比較されます。
# 3行目から5行目まで印刷 if ( 3..5 ) { print; }