「初めてのPerl」 第十章
第十章から。
(注意)以下のテクニックは多用厳禁です。コードを読み解く際の参考にするのが良いです。
第十章 さまざまな制御構造
内容
用語集
用語 | 説明 |
---|---|
式修飾子 | 式の後ろに、式を制御する修飾子を置く。 |
ポストインクリメント | $n++; |
ポストデクリメント | $n--; |
プリインクリメント | ++$n; |
プリデクリメント | --$n; |
部分評価演算子 | &&,||等、ある場合には式を評価しないことがある演算子。 |
Point
if文やwhile文の条件を反転させたい
# unless制御構造はif文の反対 # 下記のブロック内はif文なら実行されるが。。。 unless (1) { # 実行されません } # さらにwhile文の反対はuntil制御構造 # 普通なら無限ループが起こるが。。。 until (1) { # 実行されません }
簡単なif文やwhile文を1行で書きたい
# $nが0より大きければ、'hoge'が出力される print 'hoge' if $n > 0; # $nが10より小さい間、2が足され続ける $n += 2 while $n < 10;
スコープの範囲を設定したい
# 裸の括弧内のみにスコープを持つ { my $hoge = 'hogehoge'; } # エラーになってしまう print $hoge;
オートインクリメント(デクリメント)のタイミング
# オートインクリメントやデクリメントは、 # 対象の変数の前後によって計算のタイミングが若干違う my $n = 0; $m = $n++; # $mに0が代入されてから$nに1が足される $m = $n--; # $mに1が代入されてから$nから1が引かれる $m = ++$n; # $nに1が足されてから$mに1が代入される $m = --$n; # $nから1が引かれてから$mに0が代入される
ループを制御したい(途中で抜け出したり)
# last演算子でループを抜け出す for (1..10) { if ($_ == 5) { last; # 5回目のループでループ処理を終える } } # next演算子で現在のループ処理をスキップする for (1..10) { if ($_ == 5) { next; # 5回目のループの処理を飛ばす } } # redo演算子で現在のループ処理をやり直す for (1..10) { if ($_ == 5) { redo; # 5回目のループが繰り返されて終わらない } }
2重ループの外側のループを制御したい
# ブロックにはラベルを使うことが出来、それを利用する HOGE: for (1..10) { for (1..10) { if ($_ == 5) { last HOGE; } } }
if-elseを1行に纏めたい
# 三項演算子(?:)を使えば実現出来る $n == 0 ? print 'hoge' : print 'fuga'; # $nが0なら'hoge'、0以外なら'fuga'を出力する
変数がundefの場合にデフォルト値を代入したい
# defined-or演算子(//)を使えば実現出来る my $hoge = $fuga // 'piyo'; # $fugaがundefの場合、$hogeに'piyo'が代入され、 # $fugaがundefではない場合、$hogeに$fugaの値が代入される
部分評価演算子で制御構造が実現出来る
# 部分評価演算子(&&,||,//,?:)で制御構造を実現することが出来る # 左側が偽の場合、右側は実行されない ($m < $n) && ($m = $n); # 左側が真の場合、右側は実行されない ($m > $n) || ($m = $n);
次回は
次回は第十一章を予定。