Ответ 1
Из Perl Doc..
- ИЛИ
Это оператор списка. В правой части оператора списка он имеет очень низкий приоритет, так что он контролирует все найденные там выражения, разделенные запятыми. Единственными операторами с более низким приоритетом являются логические операторы "и", "или" и "нет", которые могут использоваться для оценки вызовов операторов списка без необходимости в дополнительных скобках. Логически или, Определено или, и Эксклюзивно Или
Binary "или" возвращает логическую дизъюнкцию двух окружающих выражений. Это эквивалентно || за исключением очень низкого приоритета. Это делает его полезным для потока управления
print FH $data or die "Can't write to FH: $!";
Это означает, что это короткое замыкание: т.е. правильное выражение оценивается только в том случае, если левое выражение ложно. Из-за своего приоритета вам, вероятно, следует избегать использования этого для назначения, только для потока управления.
$a = $b or $c; # bug: this is wrong
($a = $b) or $c; # really means this
$a = $b || $c; # better written this way
Однако, когда это назначение списка-контекста, и вы пытаетесь использовать "||", для потока управления вам, вероятно, потребуется "или" , чтобы присвоение занимало более высокий приоритет.
@info = stat($file) || die; # oops, scalar sense of stat!
@info = stat($file) or die; # better, now @info gets its due
Затем вы всегда можете использовать круглые скобки.
- ||
Если какой-либо оператор списка (print() и т.д.) или любой унарный оператор (chdir() и т.д.) сопровождается левой скобкой в качестве следующего токена, оператор и аргументы в круглых скобках считаются наивысшими приоритет, как и обычный вызов функции. Например, поскольку именованные унарные операторы имеют более высокий приоритет, чем ||:
chdir $foo || die; # (chdir $foo) || die
chdir($foo) || die; # (chdir $foo) || die
chdir ($foo) || die; # (chdir $foo) || die
chdir +($foo) || die; # (chdir $foo) || die