これを実行すると:
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
$x = 2;
continue;
}
when (2) {
say '2';
}
}
これは 1 と 2 の両方を出力するはずですが、1 しか出力しません。
編集:
$x = 2 を追加しましたが、まだ「1」しか出力されません
これを実行すると:
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
$x = 2;
continue;
}
when (2) {
say '2';
}
}
これは 1 と 2 の両方を出力するはずですが、1 しか出力しません。
編集:
$x = 2 を追加しましたが、まだ「1」しか出力されません
perlsynのman ページを参照してください。
given(EXPR) はブロックのレキシカルスコープ内で EXPR の値を $_ に代入します
このコードは 1 と 2 を出力します。
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
$_ = 2;
continue;
}
when (2) {
say '2';
}
}
continueswitch コンストラクトにおけるフォールスルーの目的または性質を誤解している可能性があると思います。
すべてwhenのブロックは暗黙的なブレークで終了するため、given一致が成功すると終了します。すべては、条件の処理を続行し、ブレークアウトしないようにブロックにcontinue指示することです。次の条件が真ではない場合、魔法のように真になることを強制しません。givenwhenwhen
これを考えてみましょう。これは2 回出力します。
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
continue;
}
when ( /1/ ) {
say '1 again';
}
}
given はループ コンストラクトではないため (continue をサポートしているにもかかわらず、その場合は特殊なケースです)、 foreach または for を次のように使用します。
use feature ':5.10';
$x=1;
for ($x) {
when(1) {
say '1';
$x = 2;
continue;
}
when (2) {
say '2';
}
}
for (expression) は $_ を式に設定し、その動作は場合によっては、given/when の前にスイッチをエミュレートするために使用されました。