Второе изменение в работе when — возможность использования оператора //.
Оператор defined-or (//), появившийся в Perl 5.10, теперь может быть использован и как булево выражение в операторе when.
Работает он так, как интуитивно и ожидается:
use v5.10.1;
my $approx1 = undef;
my $approx2 = 3;
my $approx3 = 3.14;
given (3) {
when($approx1 // $approx2) {say '1 or 2'}
when($approx2 // $approx3) {say '2 or 3'}
default {say 'None'}
}
В этом примере сработает первое условие.
Наиболее очевидное применение оператора // — подстановка значения по умолчанию. В следующем примере показана функция, которая ищет либо явно указанное число, либо 123 по умолчанию:
use v5.10.1;
my @data = <DATA>;
find(\@data);
find(\@data, 456);
sub find {
my $a_ref = shift;
my $value = shift;
say "find called";
for (@$a_ref) {
when ($value // 123) {say "Number $_"}
when (/^\w+$/) {say "String $_"}
}
}
__DATA__
alpha
123
beta
456
gamma
7.89
Поиск адекватных примеры из реальных приложений, в которых применяются новшества, по-видимому потребует не один месяц ожидания 🙂