perl — switch,case, , given, when

Аналоги Switch в Perl программах на удивление мало распространены. Хотя есть аж два его варианта, доступные уже лет ддесять - switch и given. B обе всё ещё экспериментальные.

Начиная с perl 5.10.1, появился оператор(?) switch

#!perl
use feature "switch";

Он не очень прямой, имеет ограничения. Политически грамотно использовать given/when:

#!perl
use v5.10.1;
for ($var) {
    when (/^abc/) { $abc = 1 }
    when (/^def/) { $def = 1 }
    when (/^xyz/) { $xyz = 1 }
    default       { $nothing = 1 }
}
given ($var) {
    when (/^abc/) { $abc = 1 }
    when (/^def/) { $def = 1 }
    when (/^xyz/) { $xyz = 1 }
    default       { $nothing = 1 }
}
use v5.14;
for ($var) {
    $abc = 1 when /^abc/;
    $def = 1 when /^def/;
    $xyz = 1 when /^xyz/;
    default { $nothing = 1 }
}
use v5.14;
    given ($var) {
    $abc = 1 when /^abc/;
    $def = 1 when /^def/;
    $xyz = 1 when /^xyz/;
    when ([1,3,5,7,9]) {...}
    default { $nothing = 1 }
}

when может использоваться в for() или given() - там, где есть $_. $_ и используется в неявном случае.

Раздел Experimental Details on given and when описывает всякие ужасы, и, согласно этому описанию, использовать их нельзя 🙂

Если надоест всё же видеть предупреждения о экспериментальности этих конструкций, просто напишите:

#!perl
use experimental qw(switch);

Leave a Reply