Was ist der Unterschied zwischen den Kurzschlussoperatoren von Perl (oder, und) und (||, & amp; & amp;)?
Welche dieser Unterprogramme ist nicht wie die anderen?
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;
}
Kam ich zu Perl 5 für C-und Perl-4 und immer verwendet ||
bis ich sah, mehr Skripte mit or
und ich mochte die Art, wie Sie aussah. Aber wie die obigen quiz-shows, es ist nicht ohne Fallstricke für den unvorsichtigen. Für Menschen, die beide Konstrukte oder die Verwendung eines Menge or
was Faustregeln, die Sie benutzen, um zu entscheiden, welche Konstruktion zu verwenden, und stellen Sie sicher, dass der code tut, was Sie denken, es tut.
InformationsquelleAutor der Frage mob | 2009-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufgrund der niedrigen Priorität der 'oder' - operator, or3 analysiert wie folgt:
Der übliche Rat ist, verwenden Sie nur die 'oder' - operator für den control-flow:
Weitere Diskussion finden Sie in der perl-manual: http://perldoc.perl.org/perlop.html#Logical-or-and-Exclusive-Or
InformationsquelleAutor der Antwort Igor ostrovsky
Den operator-Rangfolge Regeln.
||
bindet fest,or
bindet schwach. Es gibt keine "Faustregel".Wenn Sie eine Faustregel, wie etwa "verwenden Sie nur die
or
wenn es kein lvalue":or
:||
:Stimme ich mit MJD über die Vermeidung von parens; wenn Sie die Regeln nicht kennen, schauen Sie... aber nicht schreiben
(open(my $fh, '>', 'file')) or (die("Failed to open file: $!"))
"nur um sicher zu sein", bitte.InformationsquelleAutor der Antwort jrockway
In Perl 5, "oder" und "und" haben geringeren Vorrang als "||" und "&&". Überprüfen Sie heraus dieses PerlMonks-thread für mehr Infos:
http://www.perlmonks.org/?node_id=155804
InformationsquelleAutor der Antwort perimosocordiae
Beide Versionen sind Kurzschluss in Perl, aber die 'textuellen' forms ("und" und "oder") haben eine niedrigere Priorität als Ihre C-Stil-Entsprechungen.
http://www.sdsc.edu/~moreland/Kurse/IntroPerl/docs/manual/pod/perlop.html#Logical_And
InformationsquelleAutor der Antwort Ed S.
Meine Vermutung ist, dass or3 ist anders.
Ich bin nicht wirklich ein Perl Kerl, aber es sieht aus wie 1, 2, und 4 alle explizit return Boolean. Ich vermute 3 hat Nebenwirkungen, wie die Rückgabe von $a oder etwas verrücktes wie das.
schaut
Hey, ich hatte Recht.
InformationsquelleAutor der Antwort Stefan Kendall