blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_1

Perl 「 式修飾子 」制御構造 (0x82)

Perl 「 式修飾子 」制御構造 (0x82)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x82 回。

Perl の「 式修飾子 」( expression modifier ) ( 後置演算子 ? ) について。




式修飾子



「 式修飾子 」とは、式の後方 ( 終端のセミコロンの直前 ) で指定する動作制御のための修飾子です。

perlsyn
- perldoc.jp によると「 文修飾子 」とも呼ぶ様です。

式修飾子は、例えば次の様なものです。


print "It's true !" if EXPR ;


この場合「 EXPR 」が 真 の場合に print 文を実行します。

if 制御構造のように見えますが、これはあくまで「 式修飾子 ( 文修飾子 ) 」の「 if 」なので、else や elsif は使えません。

式修飾子の種類



式修飾子には次の種類があります。


if EXPR
unless EXPR
while EXPR
until EXPR
foreach LIST


各修飾子は「 EXPR ( 条件式 ) 」の 真偽 値によって動作を決めます。

その動作は、これまで確認した制御構造と同じです。

「 if 」は、条件式が 真 なら前置された式を実行します。

「 unless 」は、条件式が 偽 なら前置された式を実行します。

「 while 」は、条件式が 真 の間は前置された式をループとして実行します。

「 until 」は、条件式が 偽 の間は前置された式をループとして実行します。

「 foreach 」は、LIST のリストデータを1 つずつ取り出して前置された式に渡します。この時渡される値はお約束の $_ に入っています。

修飾子の「 if 」と「 unless 」



式修飾子 if の利用方法は既に確認しましたが、今一度次に示します。

スカラ変数 $num の値が 10 より小さい場合に $num に 10 を加算します。


$num += 10 if $num < 10;


式修飾子 unless も同様に、次の様に利用します。

変数 $num の値が 10 以下という条件が 偽 を返す場合、つまり、10 より大きい場合に $num の値を減算します。


$num -= 10 unless $num <= 10;


修飾子の「 while 」と「 until 」



式修飾子の while は例えば次の様に利用します。

スカラ変数 $i が 10 になるまで $i をインクリメントします。


$i++ while $i <= 10;


式修飾子の until で同じ処理を書く場合は次の様になります。


$i++ until $i > 10;


$i が 10 より多くなった時点で条件式が 真 になるので until ループが終了します。

修飾子の「 foreach 」



式修飾子の foreach は例えば次の様に利用します。

配列 @arry の要素を順番に出力します。


print "arry[$_] : $arry[$_]\n" foreach (0..$#arry);


また、配列の値をひとつずつサブルーチンに渡したい場合には、


foreach (@arry) {
&subroutine ($_);
}


と書くよりも、


&subroutine ($_) foreach (@arry);


と書いた方がシンプルです。

なお、式修飾子 foreach の制御変数は、 $_ から変更することは出来ません。

式修飾子の書き方



僕個人の好みでは、式修飾子を次のように 1 行に収めます。


$num += 10 if $num < 10;


しかしながら、人によっては同じ 1 行でも次の様に距離を置くことを好む人もいる様です。


$num += 10 if $num < 10;


また、あえて改行を入れることで、式修飾子を見やすくする方法もある様です。


$num += 10
if $num < 10;


この場合は、式修飾子であることを分かりやすくするために、式修飾子はインデントします。

0x82 -> 0x83 へ



通常の制御構造ではブロックの中で複数の処理が可能ですが、式修飾子で前置出来るのは 1 つ式だけです。

例えば、if 文で複数の処理をしたい場合、通常の制御構造ではブロック内で複数の処理を書くことが出来ますが、式修飾子の場合は 1 つの処理しか出来ません。


if ($num) {
my $i = $num;
$i++;
print "$i\n";
}


 * ただし、次回確認するカンマ演算子を使えば少なくとも 2 つの処理は出来る様です。

また、式修飾子はブロック構造を持たないので、当該の処理に限定したスコープを作ることも出来ません。

参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index
















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲