Perlの制御構造に関する学習ノート
2022-01-16 02:47:18
I. 条件付き判定
コピーコード
コードは以下の通りです。
if ( ) {
}
elsif ( ) {
}
...
else{
}
i f 文のもう一つの作り方は、複数の式を使い、どの式が真になるかによってコードを実行することです。上のステートメントブロックは、次のように読むことができます。e x p r e s i o n 1 と書かれた式が真であれば、B L O C K 1 というステートメントブロックが実行されます。そうでなければ、制御は e l s i f に移り、e x p r e s i s i o n 2 でテストが実行されます。式が真であれば
そして、B L O C K 2 を実行し、e x p r e s i n 1 と e x p r e s i n 2 のいずれも真でなければ、B L O C K 3 を実行します。
II. ループ
1. while ループ
コピーコード
コードは以下の通りです。
while ( ) {
}
2、untilループ
コピーコード
コードは以下の通りです。
until ( ) {
}
3. C言語ライクなforループ、例えば
コピーコード
コードは以下の通りです。
for ($count=1; $count <= 5; $count++) {
# statements inside the loop go here
forループでカンマ演算子を使用する例を以下に示します。
コピーコード
コードは以下の通りです。
for ($line = , $count = 1; $count <= 3; $line = , $count++) {
print ($line);
}
以下の記述と同等です。
コピーコード
コードは以下の通りです。
$line = ;
$count = 1;
while ($count <= 3) {
print ($line);
$line = ;
$count++;
}
4. リスト(配列)の各要素に対してループをかける:foreach、構文は以下の通り。
コピーコード
コードは以下の通りです。
foreach localvar (listexpr) {
statement_block;
}
例
コピーコード
コードは以下の通りです。
foreach $word (@words) {
if ($word eq "the") {
print ("found the word 'the'\n");
}
}
注意事項
(1) ここでのループ変数localvarはローカル変数で、それ以前にすでに値を持っていた場合、ループ後もその値が復元されます。
(2) ループ内のローカル変数を変更すると、対応する配列変数も変更される、例.
コピーコード
コードは以下の通りです。
@list = (1, 2, 3, 4, 5);
foreach $temp (@list) {
if ($temp == 2) {
$temp = 20;
}
}
この時点で@listは(1, 20, 3, 4, 5)になっています。
5. ループを行う
コピーコード
コードは以下の通りです。
do {
statement_block
} while_or_until (condexpr);
doループは、ループを少なくとも1回実行する。
6. ループ制御
次のループはnextで、C言語のcontinueと同じです。PERLでユニークなコマンドはredoで、これはループを繰り返す、つまりループ変数は変更せず、ループの最初に戻ることを意味します。
7. 伝統的なgoto label;ステートメント。
III. 単一行条件文
文法は文キーワードcondexpr.で、キーワードはif, unless, while, untilのいずれかを指定します。
コピーコード
コードは以下の通りです。
print ("This is zero.\n") if ($var == 0);
print ("This is zero.\n") unless ($var ! = 0);
print ("Not zero yet.\n") while ($var -- > 0);
print ("Not zero yet.\n") until ($var-- == 0);
条件判断は後から書かれているが、先に実行される。
ディレクティブ: unless if not
unlessは、"判別式が真でなければ..."を実行する、という意味です。
構文 I:
コピーコード
コードは以下の通りです。
unless(discriminant operator) {
Block of statements when the discriminant is false;
}
上記の構文は、Perlでは、discriminant is false unless (discriminant operator)のように書くこともできます。
例
コピーコード
コードは以下の通りです。
print"Please enter your score? \n";
$scorre=; # for standard input, will let the user enter a string
chop($score); #Remove the last newline character \n from $score
unless($score<60)
{
print"Your score is passing! \n";
}
また、次のように書くこともできます。 print"あなたのスコアは合格です! \但し、unless($score<60)です。
構文 II:
コピーコード
コードは以下の通りです。
unless (discriminant operator)
{
Block of statements when the discriminant is false;
}else{
Statement block when the discriminant is true;
}
例
コピーコード
コードは以下の通りです。
print"Please enter your score? \n";
$scorre=;
chop($score);
unless($score<60)
{
print"Your score is passing! \n";
}else{
print"Your score failed! \n";
}
Advanced Tips:&&,||and? : を制御構造として使用する。
これらは句読点のようにも、式の一部にも見えます。しかし、Perlでは制御構造として使用することができます。
例えば
コピーコード
コードは以下の通りです。
if (discriminant expression)
{block of statements when true};
と書くこともできます。
コピーコード
コードは以下の通りです。
Statement block if (discriminatory expression) when true
しかし、もっとシンプルな方法であれば
コピーコード
コードは以下の通りです。
Block of statements when the discriminant && is true
なぜかというと、&&は論理的なwith演算子だからです。
判別式が真であれば、式の値はその後に続くステートメントブロックの値に依存します。そこで、真であるステートメントブロックが実行される(値を求めるために使用される)。
判別式が偽の場合、その後に続くステートメントブロックの値に関係なく、式全体が偽となります。そのため、ステートメントブロックがfalseのときは実行されない。
同じ意味で、unless(this){that}はthis||thatに置き換えることができる。
? expression example:exp1?exp2:exp3 は、「exp1 が真なら exp2 の値を求め、そうでないなら exp3 の値を求める」という意味です。
関連
-
Perlの1行コメントと複数行コメントの構文
-
PerlでローカルタイムからUNIXタイムスタンプに変換する方法
-
[解決済み】グローバルシンボルはパッケージ名を明示する必要がある
-
Perlのサブルーチン 学習メモ
-
File::Basename を使用してファイル拡張子を取得する Perl コード
-
Linux/Unix で Perl モジュールをインストールする 2 つの方法
-
perl変数$/の使用方法について説明します。コンテキストが行モードのとき、$/は行を区別するものを定義します。
-
[解決済み] Perlで「ハッシュの代入の要素数が奇数である」という警告が出る
-
[解決済み] perl で awk コマンドを実行する
-
[解決済み] Perlでタイムアウトを行う方法?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン