Подтвердить что ты не робот

Что здесь означает двойная косая черта?

Я новичок в Perl и наткнулся на этот кусок кода на работе, я искал какое-то время, но не нашел ответа. Может ли кто-нибудь помочь объяснить его функцию на простом английском? спасибо.

my $abc = delete $args{ 'abc' } // croak 'some information!';
4b9b3361

Ответ 1

С этой страницы здесь: http://perldoc.perl.org/perlop.html#Logical-Defined-Or

Хотя он не имеет прямого эквивалента в C, оператор Perl // связан с его стилем C or. На самом деле это точно так же, как || , За исключением того, что он испытывает левостороннюю определенность вместо ее истинности. Таким образом, EXPR1//EXPR2 возвращает значение EXPR1 если оно определено, в противном случае возвращается значение EXPR2. (EXPR1 вычисляется в скалярном контексте, EXPR2 в контексте самого //). Обычно это такой же результат, как defined(EXPR1)? EXPR1: EXPR2 defined(EXPR1)? EXPR1: EXPR2 (за исключением того, что форма троичного оператора может использоваться как l-значение, тогда как EXPR1//EXPR2 не может, а EXPR1 будет оцениваться только один раз). Это очень полезно для предоставления значений по умолчанию для переменных. Если вы действительно хотите проверить, определен ли хотя бы один из $a и $b, defined($a//$b).

Ответ 2

Проверьте Logical Defined-or в perlop, он похож на ||, но он проверяет значение undef (не false one).

Хотя он не имеет прямого эквивалента в C, оператор Perl//связан с его C-стилем или. Фактически, он точно такой же, как и ||, за исключением того, что он проверяет определенность левой стороны вместо своей правды.

Итак,

my $abc = delete $args{ 'abc' } // croak 'some information!';

будет кричать, когда $args{ 'abc' } возвращает значение undef.