Существует ли Perl, эквивалентный нулевому коалесцирующему оператору (??) в С#?
Мне очень понравился оператор С# . И я довольно привык к тому, что там, где на каком-то языке есть что-то удобное, это, скорее всего, и в Perl тоже.
Однако я не могу найти?? эквивалент в Perl. Есть ли?
Ответы
Ответ 1
В соответствии с 5.10 существует оператор //
, который семантически эквивалентен, если вы считаете, что понятие undef
в Perl эквивалентно понятию null
в С#.
Пример A:
my $a = undef;
my $b = $a // 5; # $b = 5;
Пример B:
my $a = 0;
my $b = $a // 5; # $b = 0;
Ответ 2
Как Адам говорит, Perl 5.10 имеет оператор //
, который проверяет свой левый оператор для определенности, а не правды:
use 5.010;
my $value = $this // $that;
Если вы используете более раннюю версию Perl, это немного грязно. ||
не будет работать:
my $value = $this || $that;
В этом случае, если $this
равно 0 или пустой строке, оба из которых определены, вы получите $that
. Чтобы обойти это, идиома - использовать условный оператор, чтобы вы могли сделать свой собственный чек:
my $value = defined( $this ) ? $this : $that;
Ответ 3
Собственно, оператор короткого замыкания OR также будет работать при оценке undef:
my $b = undef || 5; # $b = 5;
Однако при оценке 0, но это не будет:
my $b = 0 || 5; # $b = 5;
Ответ 4
Вопрос подразумевал любое количество аргументов, поэтому ответ подразумевает подпрограмму:
Здесь вы его получите - вернет первое определенное/непустое значение строки списка:
sub coalesce { (grep {length} @_)[0] }
Ответ 5
Не то, чтобы я знал.
Perl на самом деле не большой пользователь пустой концепции. У него есть тест на переменную undefined. Никакого специального оператора, подобного хотя, но вы можете использовать условный оператор:: с тестом undef и получить довольно близко.
И я ничего не вижу в perl списке операторов.