比較演算子
条件分岐やループの前に、まずは比較演算子についてメモしておく。数値と文字列で比較演算子が違うので注意。bash に似ている。数値 | 文字列 | 説明 |
---|---|---|
> | gt | 左側が右側より大きい |
>= | ge | 左側が右側より大きい or 等しい |
< | lt | 左側が右側より小さい |
<= | le | 左側が右側より小さい or 等しい |
== | eq | 等しい |
!= | ne | 等しくない |
>=< | cmp | 比較 (左側が大:1, 等しい:0, 右側が大:-1 を返す) |
関係演算子
複数の条件式を組み合わせたいときに使います。論理積 | and または && |
論理和 | or または ll |
排他的論理和 | xor |
否定 | not または ! |
条件分岐
■ if 文case 文(switch 文)っぽい記述を調べたところ given-when 文というのがあるらしいが、if-else 文の方が高速らしいので見なかったとこにする。
また、if は条件を満たした場合に処理が行われるが、if の代わりに unless を使うと条件が満たされれなかった場合に処理が行われる。(個人的には if 文で ! を使って否定する方が見やすい。)
if (<条件式1>) {
処理1;
} elsif (<条件式2>) {
処理2;
} else {
処理3;
}
1行で書くには
処理 if (<条件式>);
if文の代わりに三項演算子も使えます。(Verilog ですごく馴染みのある記述...)
$result = (<条件式>) ? <真のときに代入する値> : <偽のときに代入する値>;
ループ
■ while 文ファイルを1行毎に処理したい場合によく使う。
do-while 文もあるが、next や last が使えないという謎仕様らしいので未記載。
while を until にすると条件が偽の間ループとなるらしい。
# i >= 10 になったら抜ける
while (my $i < 10) {
...
$i++;
}
# ファイルを1行毎に処理
open (FH, "< $file_path");
while (my $line = <FH>) {
...
}
■ for 文
for (my $i = 0; $i < 10; $i++) {
...
}
■ foreach 文
配列を処理したいときによく使う。
foreach my $i (0..9) {
...
}
# 配列処理
foreach my $j (@array) {
...
}
■ ループを飛ばす/抜ける
次のループに飛ばす場合は next を使用。下記の例では i = 5 の場合のみ以降の処理が飛ばされ、i = 6 の処理が走る。
foreach my $i (0..9) {
next if ($i == 5);
...
}
ループから抜ける場合は last を使用。下記の例では i = 5 を検出したら抜ける。
foreach my $i (0..9) {
last if ($i == 5);
...
}
多重ループから抜けたい場合は last <ラベル名> を使用。
LABEL: foreach my $i (1..10) {
foreach my $j (1..10) {
last LABEL if ($j == 5);
...
}
}
ループ処理を最初からやり直す redo 演算子があるらしいが、使ったことない。無限ループにならないように注意。
0 件のコメント:
コメントを投稿