Ответ 1
С этой страницы здесь: 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)
.