演算子と制御構造

■演算子■

算術演算子
$x = 1 + 2; # 足し算 $xには、3が代入されます。
$x = 3 - 1;  # 引き算($x = 2)
$x = 3 * 2;  # 掛け算($x = 6)
$x = 6 / 2;  # 割り算($x = 3)
$x = 5 % 2;  # 5を2で割った余り($x = 1)
$x = 5 ** 2; # 5の2乗($x = 25)
$x++;        # $xに+1されます(インクリメント)
$x--;        # $xに-1されます(デクリメント)

# インクリメント/デクリメント演算子は以下のような特性があります。
$a = 1;
print $a++; # 1が表示される。処理後に$aに+1する。
print ++$a; # 2が表示される。処理前に$aに+1する。

代入演算子
$x = 1;       # $xに1を代入
$x += 1;      # $xを+1し$xに代入
$x -= 1;      # $xを-1し$xに代入
$x *= 2;      # $xを×2し$xに代入
$x /= 2;      # $xを÷2し$xに代入
$x %= 2;      # $xを2で割った余りを$xに代入
$x **= 2;     # $xを2乗した値を$xに代入
$x .= 'hoge'; # $xに「hoge」を連結する(文字列)

ビット演算子
$x & $y # $xと$yをANDする
$x | $y # $xと$yをORする
$x ^ $y # $xと$yをX-ORする
~$x     # $xの否定(ビット反転)
$x>>2   # $xを右に2ビットシフト
$x<<2   # $xを左に2ビットシフト

比較演算子
# 数値用比較演算子
$x == $y  # $xと$yが等しければ「真」
$x != $y  # $xと$yが等しくなければ「真」
$x > $y   # $yより$xが大きければ「真」
$x >= $y  # $yと$xが等しい、もしくは$yより$xが大きければ「真」
$x < $y   # $xより$yが大きければ「真」
$x <= $y  # $xと$yが等しい、もしくは$xより$yが大きければ「真」
$x <=> $y # $x=$y:(0), $x>$y:(1), $x<$y:(-1)となる。

# 文字列比較演算子
$x eq $y  # $xと$yが等しければ「真」
$x ne $y  # $xと$yが等しくなければ「真」
$x gt $y  # $yより$xが大きければ「真」
$x ge $y  # $yと$xが等しい、もしくは$yより$xが大きければ「真」
$x lt $y  # $xより$yが大きければ「真」
$x le $y  # $xと$yが等しい、もしくは$xより$yが大きければ「真」
$x cmp $y # $x eq $y:(0), $x gt $y:(1), $x lt $y:(-1)となる。

論理演算子
$x && $y # 論理積 $xが真、かつ$yが真なら「真」
$x || $y # 論理和 $xが真、もしくは$yが真なら「真」
!$x      # 否定 $xが真でなければ「真」

条件演算子
$x = (条件式)?'aaa':'bbb'
# 条件式が真なら「aaa」が$xに代入され、偽なら「bbb」が$xに代入される

■制御構造■

条件分岐(if/unless)
# 条件式が「真」なら処理Aが実行される。
if(条件式){
	処理A
}

# 条件式が「真」なら処理Aが実行され「偽」なら処理Bが実行される。
if(条件式){
	処理A
}
else{
	処理B
}

# 条件式1が「真」なら処理Aが実行、条件式2が「真」なら処理Bが実行、
# 他は処理Cが実行される。
if(条件式1){
	処理A
}
elsif(条件式2){
	処理B
}
else{
	処理C
}

# unlessの場合、ifと逆です。条件式が「偽」なら処理Aが実行されます。
unless(条件式){
	処理A
}
# 省略について。1行の処理であれば以下のように{}を省略してかけます。
print "Hello World.\n" if($a == $b);

繰り返し
# while:条件式が「真」の間、処理Aを繰り返す。
while(条件式){
	処理A
}

# until:条件式が「偽」の間、処理Aを繰り返す。whileの逆。
until(条件式){
	処理A
}

# for / foreach:いろいろな使い方があります。
# ちなみに、forとforeachは同じ使い方ができます。

# i=0からi<10が「真」になるまで処理Aを繰り返す。$iは、処理の度に+1される。
for (my $i=0; $i<10; $i++){
	処理A
}

# 上記の書き方は、このようにも書けます。$iを省略すると$_が使えます。
for my $i (1 .. 9){
	処理A
}

# 配列のリストごとに繰り返し処理をすることもできます。
# $iには、配列の要素が入ります。省略すると$_が使えます。
for my $i (@a){
	処理A
}

# do~while/untile:条件式を後に持ってくることもできます。
do{
	処理A
}while(条件式)

# ループ制御
last:ループブロックを抜ける。
next:処理を飛ばし、ループに戻る(条件式に戻る)。
redo:処理を飛ばし、ループに戻る(ブロックの先頭に戻る)。

# 省略について。1行の処理であれば以下のように{}を省略してかけます。
print $_ . "\n" for (1 .. 10);
print "Hello World.\n" while(条件式);

以上です。                                                 >>5. ファイル操作