Мне очень понравился оператор ?? в C #. И я вполне привык к тому, что там, где есть что-то удобное на каком-то языке, скорее всего, это и Perl.
Однако я не могу найти ?? эквивалент в Perl. Есть ли?
Мне очень понравился оператор ?? в C #. И я вполне привык к тому, что там, где есть что-то удобное на каком-то языке, скорее всего, это и Perl.
Однако я не могу найти ?? эквивалент в Perl. Есть ли?
Начиная с версии 5.10 существует оператор //
, который семантически эквивалентен, если вы считаете, что концепция undef
в Perl эквивалентна концепции null
в C #.
Пример А:
my $a = undef;
my $b = $a // 5; # $b = 5;
Пример Б:
my $a = 0;
my $b = $a // 5; # $b = 0;
defined($a) ? $a : $b
, которая выполняет свою работу и достаточно ясно читается.
- person hobbs; 12.12.2009
Как сообщает ,, в Perl 5.10 есть оператор //
, который проверяет его левый оператор на определенность, а не на истинность:
use 5.010;
my $value = $this // $that;
Если вы используете более раннюю версию Perl, это немного запутано. ||
не будет работать:
my $value = $this || $that;
В этом случае, если $this
равно 0 или пустой строке, оба из которых определены, вы получите $that
. Чтобы обойти это, идиома состоит в том, чтобы использовать условный оператор, чтобы вы могли сделать свою собственную проверку:
my $value = defined( $this ) ? $this : $that;
Фактически, оператор короткого замыкания ИЛИ также будет работать при вычислении undef:
my $b = undef || 5; # $b = 5;
Однако при оценке 0, но истинно, он не сработает:
my $b = 0 || 5; # $b = 5;
Вопрос подразумевает любое количество аргументов, поэтому ответ подразумевает подпрограмму:
Вот и все - вернет первое определенное / непустое строковое значение списка:
sub coalesce { (grep {length} @_)[0] }
//
тоже должно работать.
- person svick; 25.01.2013
Не то, что я знаю из.
На самом деле Perl не является большим пользователем нулевой концепции. У него есть проверка, является ли переменная неопределенной. Нет специального оператора, подобного ?? хотя, но вы можете использовать условный оператор?: с тестом undef и подойти довольно близко.
И я ничего не вижу в списке операторов perl либо.
$a ?? 5
то же самое, что и$a != null ? $a : 5
, что означает, что если $ a НЕ НУЛЕВО, результатом выражения будет $ a, в противном случае результат будет 5. Это проверка полезна для установки значения по умолчанию, если null,$a = $a ?? 5
. - person Despertar   schedule 12.01.2015