sustitucion regulares patron operadores operador lenguaje expresiones ejemplos busqueda and perl short-circuiting

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?



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



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.