given ブロックを抜ける
break
は、given
-when
文による switch 構文において、
when
ブロック内で呼び出すことで given
ブロックを抜けます。
しかし、when
ブロックの最後で暗黙的に break
が呼び出されるため、
通常は明示的に break
を呼び出す必要はありません。
なお、given
-when
文は実験的な実装であり、
Perl v5.10.1 以降から利用できます。この構文を使う場合は、use v5.10.1;
(v5.10.1 以降なら何でも構いません) を宣言しておく必要がありますので注意してください。
実際にはこの構文は Perl v5.10.0 から実装されていたようですが、v5.10.0 では期待通りに動作しないようです。 そのため、v5.10.1 以降で使えると考えて差し支えありません。
use v5.10.1;
my $var = 'Hello World';
given ($var) {
when (/Hello/) { say 'Hello' }
when (/World/) { say 'World' }
default { say 'Default' }
}
上記コードは、スカラー変数 $var の値に Hello が含まれれば Hello と、
World が含まれれば World と出力し、いずれにも該当しなければ Default と出力します。
結果的に上記コードは Hello と出力されて、該当の when
ブロックを抜け、
さらには given
ブロックを抜けます。
上記コードは次のコードと同じです。
use v5.10.1;
my $var = 'Hello World';
given ($var) {
when (/Hello/) { say 'Hello'; break; }
when (/World/) { say 'World'; break; }
default { say 'Default'; break; }
}
break
を明示的に記述するとすれば、
when
ブロックが実行された際に、何かしらの条件によって
when
ブロックを途中で抜けたい場合が挙げられるでしょう。
あまり実用的な例ではありませんが、次のコードはスカラー変数 $var に
Hello が含まれている場合、もしスカラー変数 $name に値がセットされていなければ
when
ブロックおよび given
ブロックを抜けます。
use v5.10.1;
my $var = 'Hello World';
my $name = 'Taro';
given ($var) {
when (/Hello/) {
print 'Hello';
unless ($name) {
print "\n";
break;
}
say ' ' . $name;
}
when (/World/) { say 'World'; }
default { say 'Default'; }
}
上記コードはスカラー変数 $name に何もセットされていなければ "Hello" とだけ出力されます。そして、$name に "Taro" がセットされていれば "Hello Taro" と出力されます。