Из Perl Doc.
Это оператор списка. В правой части оператора списка он имеет очень низкий приоритет, так что он управляет всеми найденными там выражениями через запятую. Единственные операторы с более низким приоритетом - это логические операторы «и», «или» и «не», которые могут использоваться для оценки вызовов операторов списков без необходимости использования дополнительных скобок.
Логический или, Определенный или, и Эксклюзивный Или
Binary "or" возвращает логическую дизъюнкцию двух окружающих выражений. Это эквивалентно || за исключением очень низкого приоритета. Это делает его полезным для управления потоком
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