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