given文

givenはC言語のswitch文に相当する構文です。givenに与えられた引数をwhenの条件でテストし、マッチしたブロックを実行します。

my ($two, $five);
given 5 {
    when 2 { $two  = 1 }
    when 5 { $five = 1 } # この行が実行される
}

文字列を評価する場合は以下のようにします。

my $foo;
given "foo" {
    when "foo" { $foo = 1 }
}

whenは入れ子にすることも可能です。

my $foo;
given "foo" {
    when "foo" {
        when /^f/ {
            $foo = 1
        }
    }
}

whenの条件にマッチしない場合はdefaultが実行されます。

my ($two, $five, $default);
given 3 {
    when 2  { $two  = 1 }
    when 5  { $five = 1 }
    default { $default = 1 } # この行が実行される
}

givenに与えられた引数は特殊変数$_に格納されるので、引数名の省略に使用することができます。

given "Hello" {
    $_.say;
    .say; # 同じこと
}