スキップしてメイン コンテンツに移動

Perl 5 to 6 - 基本制御構造

これはMoritz Lenz氏のWebサイトPerlgeek.deで公開されているブログ記事"Perl 5 to 6" Lesson 03 - Basic Control Structuresの日本語訳です。

原文はCreative Commons Attribution 3.0 Germanyに基づいて公開されています。

本エントリにはCreative Commons Attribution 3.0 Unportedを適用します。

Original text: Copyright© 2008-2010 Moritz Lenz

Japanese translation: Copyright© 2011 SATOH Koichi

NAME

"Perl 5 to 6" Lesson 03 - 基本制御構造

SYNOPSIS

if $percent > 100  {
    say "weird mathematics";
}
for 1..3 {
    # $_をループ変数として使う
    say 2 * $_;
}
for 1..3 -> $x {
    # 明示的なループ変数を使う
    say 2 * $x;
}

while $stuff.is_wrong {
    $stuff.try_to_make_right;
}

die "Access denied" unless $password eq "Secret";

DESCRIPTION

ほとんどのPerl5の制御構造はPerl 6でもよく似ています。 一番大きな見た目の変化はifwhileforなどの後にカッコが必要なくなったことです。

正確には、条件をカッコで囲むのは非推奨です。

分岐

ifはほとんど変わっていません。相変わらずelsifelseの節を付けることができます。 unlessもありますが、else節を付けることができなくなりました。

if $sheep == 0 {
    say "How boring";
} elsif $sheep == 1 {
    say "One lonely sheep";
} else {
    say "A herd, how lovely!";
}

ifunlessを文修飾子として(つまり文の後に付けて)使うこともできます:

say "you won" if $answer == 42;

ループ

Perl5と同様、nextlastでループを制御できます。

forループはリストを走査する場合のみに使われるようになりました。 ループ変数が与えられない場合はデフォルトで$_が使われます。

for 1..10 -> $x {
    say $x;
}

-> $x { ... }という部分は「ポインティ・ブロック」と呼ばれ、無名サブルーチン、あるいはLispのlambdaのようなものです。

1つ以上のループ変数を使うこともできます:

for 0..5 -> $even, $odd {
    say "Even: $even \t Odd: $odd";
}

これはハッシュを走査する方法でもあります:

my %h = a => 1, b => 2, c => 3;
for %h.kv -> $key, $value {
    say "$key: $value";
}

Cスタイルのforループはloopという名前になりました(これはカッコを必要とする唯一のループ構造でもあります):

loop (my $x = 1; $x < 100; $x = $x**2) {
    say $x;
}

SEE ALSO

http://perlcabal.org/syn/S04.html#Conditional_statements

コメント