В Perl это будет:
use 5.010;
given( $myValue )
{
when ( [qw<one two>] ) { say; }
when ( "three" ) { say "I'm $_"; }
default { say qq{DEFAULT for "$_"}; }
}
И чтобы проверить это:
use 5.010;
foreach my $myValue ( qw<one two three four> )
{
given( $myValue )
{
when ( [qw<one two>] ) { say; }
when ( "three" ) { say "I'm $_"; }
default { say qq{DEFAULT for "$_"}; }
}
}
И он печатает:
one
two
I'm three
DEFAULT for "four"
Perlдопускает другой тип провала с оператором continue
.Но критерии обоих случаев должны быть удовлетворены.Таким образом:
given( $myValue )
{
when ( 'one' ) { say 'one!'; continue; }
when ( 'two' ) { say 'two!'; }
}
не имеет смысла, потому что это никогда не будет случаем, когда $s ~~ 'one' && $s ~~ 'two'
, но если вы сделали второй случай:
when ( /\bo|o\b/ ) { say q/has 'o'!/; }
условие проваласпособен быть правдой.Одно предостережение: поскольку все соответствует default
, если у вас есть default
кейс, продолжение продолжит его, если ничего больше.continue
, кажется, говорит: «Хорошо, теперь посмотрим, к чему применимы другие предикаты».
Я упоминаю об этом просто потому, что это обманчиво похоже на «своего рода провальный оператор», но это действительно «взгляд снова».Оператор.