コンテンツにスキップ

Perl/制御構造

出典: フリー教科書『ウィキブックス(Wikibooks)』
プログラミング > Perl > Perl/制御構造

制御構造

[編集]

Perlの制御構造は、プログラムの実行フローを制御するための重要な構文です。条件分岐やループなど、柔軟で強力な制御構文を提供しており、多様なプログラミングスタイルに対応しています。ここでは、主な制御構造を最新版のベストプラクティスに基づいて解説します。

条件分岐

[編集]

if, elsif, else

[編集]

条件に基づいて異なる処理を実行するための基本的な構文です。

use feature 'say';
my $x = 10;

if ($x > 10) {
    say "x is greater than 10";
} elsif ($x == 10) {
    say "x is equal to 10";
} else {
    say "x is less than 10";
}

unless

[編集]

条件が「偽」である場合に処理を実行します。ifの逆の動作をします。

my $y = 5;
unless ($y > 10) {
    say "y is not greater than 10";
}

後置if/unless

[編集]

簡潔な記述のために、条件文を後置することができます。コードの可読性を向上させることができます。

say "x is equal to 10" if $x == 10;
say "y is not greater than 10" unless $y > 10;

ループ構造

[編集]

whileループ

[編集]

条件が「真」である間、処理を繰り返します。

my $i = 0;
while ($i < 5) {
    say "i is $i";
    $i++;
}

untilループ

[編集]

条件が「偽」である間、処理を繰り返します。whileの逆の動作をします。

my $j = 0;
until ($j == 5) {
    say "j is $j";
    $j++;
}

forループ

[編集]

カウントアップや範囲指定に適したループです。

for (my $k = 0; $k < 5; $k++) {
    say "k is $k";
}

foreachループ

[編集]

リストや配列の要素を処理する際に使用します。forと同等です。

my @array = (1, 2, 3, 4, 5);
foreach my $value (@array) {
    say "Value is $value";
}

後置while/until

[編集]

ループ条件を後置して簡潔に記述できます。

my $n = 0;
say "n is $n" while $n++ < 5;

ループ制御

[編集]

next

[編集]

現在の反復をスキップし、次の反復に進みます。

for my $i (1..5) {
    next if $i == 3;
    say "i is $i";
}

last

[編集]

現在のループを終了させます。breakに相当します。

for my $i (1..5) {
    last if $i == 4;
    say "i is $i";
}

redo

[編集]

現在の反復を再実行します。条件の再評価は行われません。

my $count = 0;
while ($count < 5) {
    say "count is $count";
    $count++;
    redo if $count == 3;  # "count is 3"が2回表示されます
}

条件演算子(3項演算子)

[編集]

簡潔な条件分岐を記述するための演算子です。

my $a = 10;
my $b = ($a > 5) ? "Greater than 5" : "5 or less";
say $b;  # "Greater than 5"

例外処理

[編集]

近年のPerlでは、evalブロックやモジュールTry::Tinyを利用して、エラー処理がより簡潔に記述できます。

use Try::Tiny;

try {
    die "An error occurred";
} catch {
    warn "Caught error: $_";
};

まとめ

[編集]

Perlの制御構造は非常に柔軟で、プログラムを簡潔かつ効率的に記述することが可能です。最新のPerlではsayなどのモダンな機能を活用し、可読性と保守性を高めることが推奨されます。