Я новичок в Perl и наткнулся на этот кусок кода на работе, я искал какое-то время, но не нашел ответа. Может ли кто-нибудь помочь объяснить его функцию на простом английском? спасибо.
my $abc = delete $args{ 'abc' } // croak 'some information!';
Я новичок в Perl и наткнулся на этот кусок кода на работе, я искал какое-то время, но не нашел ответа. Может ли кто-нибудь помочь объяснить его функцию на простом английском? спасибо.
my $abc = delete $args{ 'abc' } // croak 'some information!';
С этой страницы здесь: http://perldoc.perl.org/perlop.html#Logical-Defined-Or
Хотя он не имеет прямого эквивалента в C, оператор Perl
//
связан с его стилем Cor
. На самом деле это точно так же, как||
, За исключением того, что он испытывает левостороннюю определенность вместо ее истинности. Таким образом,EXPR1//EXPR2
возвращает значениеEXPR1
если оно определено, в противном случае возвращается значениеEXPR2
. (EXPR1
вычисляется в скалярном контексте,EXPR2
в контексте самого//
). Обычно это такой же результат, какdefined(EXPR1)? EXPR1: EXPR2
defined(EXPR1)? EXPR1: EXPR2
(за исключением того, что форма троичного оператора может использоваться как l-значение, тогда какEXPR1//EXPR2
не может, а EXPR1 будет оцениваться только один раз). Это очень полезно для предоставления значений по умолчанию для переменных. Если вы действительно хотите проверить, определен ли хотя бы один из$a
и$b
,defined($a//$b)
.
Проверьте Logical Defined-or в perlop, он похож на ||
, но он проверяет значение undef
(не false one).
Хотя он не имеет прямого эквивалента в C, оператор Perl//связан с его C-стилем или. Фактически, он точно такой же, как и ||, за исключением того, что он проверяет определенность левой стороны вместо своей правды.
Итак,
my $abc = delete $args{ 'abc' } // croak 'some information!';
будет кричать, когда $args{ 'abc' }
возвращает значение undef
.