Второе изменение в работе 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
Поиск адекватных примеры из реальных приложений, в которых применяются новшества, по-видимому потребует не один месяц ожидания 🙂