【Perl5】各種演算子
代入
$i = 5;
算術演算子
$i = 5 + 2; # 足し算
$i = 5 - 2; # 引き算
$i = 5 * 2; # 掛け算
$i = 5 / 2; # 割り算
$i = 5 % 2; # 5 を 2で割った余り(=1)
$i = 5 ** 2; # 5 の 2乗(=25)
$i++; # $xxの値が 1 加算されます
$i--; # $xxの値が 1 減算されます
$i **= 2; # $xx = $xx ** 2; と同様
ビット演算子
$xx | $yy # $xx と $yy の OR
$xx & $yy # $xx と $yy の AND
~$xx # $xx のビットをすべて反転させたもの
$xx << 2 # $xx を 2 ビット左シフト
$xx >> 2 # $xx を 2 ビット右シフト(上位ビットには符号ビットを埋める)
数値比較演算子
if ($xx == $yy) # $xx と$ yy が等しければ
if ($xx != $yy) # $xx と $yy が異なっていれば
if ($xx < $yy) # $xx が $yy より小さければ
if ($xx > $yy) # $xxが$yyより大きければ
if ($xx <= $yy) # $xxが$yyより等しいか小さければ
if ($xx >= $yy) # $xxが$yyより等しいか大きければ
if (($xx==2) && ($yy==3)) # $xxが2、かつ、$yyが3であれば
if (($xx==2) || ($yy==3)) # $xxが2、もしくは、$yyが3であれば
if ($xx <=> $yy) # 比較結果を -1, 0, 1 のいずれかで返す
文字列比較演算子
if ($xx eq $yy) # $xx と $yy が等しければ
if ($xx ne $yy) # $xx と $yy が異なっていれば
if ($xx lt $yy) # $xx が $yy より小さければ
if ($xx gt $yy) # $xx が $yy より大きければ
if ($xx le $yy) # $xx が $yy より等しいか小さければ
if ($xx ge $yy) # $xx が $yy より等しいか大きければ
if ($xx =~ /ABC/) # $xx が ABC という文字を含んでいれば
if ($xx !~ /ABC/) # $xx が ABC という文字を含んでいなければ
if ($xx cmp $yy) # 比較し、-1, 0, 1 のいずれかで返す
条件演算子(三項演算子)
a ? b : c # a が真であれば b さもなくば c
文字列連結演算子
文字列を連結します。
$xx = $yy . $zz; # 文字列 $yy と 文字列 $zz を連結します
$xx .= $yy; # $xx = $xx . $yy と同様です。
繰り返し演算子
print '-' x 10; # '-'を 10 個表示します。
$xx x= 10; # $xx を 10 回繰り返したものを $xx に代入します。
@ones = (1) x 10; # 10個の(1, 1, 1, 1, ......, 1)と同様です。
範囲演算子
@xx = (0 .. 5); # @xx = (0, 1, 2, 3, 4, 5);と同様。
for (0 .. 5) # for ($_ = 0; $_ <= 5; $_++) と同様
ファイル検査
ファイルが読み書き可能かどうか等を検査することができます。
# ファイル名で指定する
if (-w "file.txt") { print "書き込み可能Write\n"; }
# ファイルハンドルで指定する
open(IN, "file.txt");
if (-r IN) { print "読み込み可能\n"; }
close(IN);
# アンダーライン( _ )は最後に検査されたファイルを示す
if (-r "file.txt") { print "読み込み可能\n"; }
if (-w _) { print "書き込み可能\n"; }
# stat()を用いた例
stat("file.txt");
if (-r _) { print "読み込み可能\n"; }
次のような検査が可能です。
-r # 読み込み可能であれば
-w # 書き込み可能であれば
-x # 実行可能であれば
-o # 自分のものであれば
-R # 実uid/gidで読み込み可能であれば
-W # 実uid/gidで書き込み可能であれば
-X # 実uid/gidで実行可能であれば
-O # 実uidのものであれば
-e # 存在すれば
-z # サイズが0であれば
-s # サイズが0でなければ(ファイルサイズを返す)
-f # 通常ファイルであれば
-d # ディレクトリであれば
-l # シンボリックリンクであれば
-p # 名前付きパイプであれば
-S # ソケットであれば
-b # ブロック型スペシャルファイルであれば
-c # キャラクタ型スペシャルファイルであれば
-u # setuidビットが立っていれば
-g # setgifビットが立っていれば
-k # stickyビットが立っていれば
-t # ファイルハンドルが tty としてオープンされていれば
-T # ファイルがテキストファイルであれば
-B # ファイルがバイナリファイルであれば
-M # perl起動時における、ファイルの更新時刻からの日数
-A # perl起動時における、ファイルの参照時刻からの日数
-C # perl起動時における、ファイルの作成時刻からの日数