regulares - ¿Cuál es la diferencia entre los operadores de cortocircuito de Perl(o, y) y(||, &&)?
perl patron de busqueda (5)
¿Qué reglas básicas usa para decidir qué constructo usar y asegurarse de que el código está haciendo lo que cree que está haciendo?
Las reglas de precedencia del operador .
||
se ata fuertemente or
une débilmente. No hay una "regla de oro".
Si debe tener una regla empírica, ¿qué tal "usar solo or
cuando no hay valor l"?
or
:
open my $fh, ''>'', ''file'' or die "Failed to open file: $!"
||
:
my $greeting = greet() || $fallback || ''OH HAI'';
Estoy de acuerdo con MJD sobre evitar parientes; si no conoce las reglas, (open(my $fh, ''>'', ''file'')) or (die("Failed to open file: $!"))
... pero no escriba (open(my $fh, ''>'', ''file'')) or (die("Failed to open file: $!"))
"solo para estar seguro", por favor.
¿Cuál de estas subrutinas no es como la otra?
sub or1 {
my ($a,$b) = @_;
return $a || $b;
}
sub or2 {
my ($a,$b) = @_;
$a || $b;
}
sub or3 {
my ($a,$b) = @_;
return $a or $b;
}
sub or4 {
my ($a,$b) = @_;
$a or $b;
}
Llegué a Perl 5 desde C y Perl 4 y siempre utilicé ||
hasta que vi más guiones usando or
y me gustó la forma en que se veía. Pero como muestra el cuestionario anterior, no es sin sus peligros para los incautos. Para las personas que usan ambos constructos o que usan mucho or
, ¿qué reglas básicas usas para decidir qué constructo usar y para asegurarte de que el código está haciendo lo que crees que está haciendo?
Ambas versiones están en cortocircuito en Perl, pero las formas ''textuales'' (''y'' y ''o'') tienen una precedencia menor que sus equivalentes de estilo C.
http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlop.html#Logical_And
Debido a la baja precedencia del operador ''or'', o 3 analiza de la siguiente manera:
sub or3 {
my ($a,$b) = @_;
(return $a) or $b;
}
El consejo habitual es usar solo el operador ''o'' para el flujo de control:
@info = stat($file) or die;
Para obtener más información, consulte el manual de perl: http://perldoc.perl.org/perlop.html#Logical-or-and-Exclusive-Or
En Perl 5, "o" y "y" tienen menor prioridad que "||" y "&&". Mira este hilo de PerlMonks para más información:
Mi suposición es que or3 es diferente.
No soy realmente un tipo Perl, pero parece que 1, 2 y 4 devuelven booleanos explícitamente. Supongo que 3 tiene efectos secundarios, como devolver $ a o algo así de loco.
mira hacia abajo
Oye, estaba en lo cierto.