В чем разница между операторами Perl (или, и) и (||, &&)?
31939 просмотра
5 ответа
Какая из этих подпрограмм не похожа на другую?
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;
}
Я пришел к Perl 5 из C и Perl 4 и всегда использовал, ||
пока не увидел больше скриптов, or
и мне понравилось, как это выглядит. Но, как показывает вышеупомянутая викторина, она не лишена ловушек для неосторожных. Для людей, которые используют обе конструкции или используют много or
, какие эмпирические правила вы используете, чтобы решить, какую конструкцию использовать, и убедиться, что код выполняет то, что, как вы думаете, он делает?
Ответы (5)
41 плюса
Из-за низкого приоритета оператора 'или', or3 анализирует следующим образом:
sub or3 {
my ($a,$b) = @_;
(return $a) or $b;
}
Обычный совет - использовать только оператор 'или' для потока управления:
@info = stat($file) or die;
Для получения дополнительной информации см. Руководство по Perl: http://perldoc.perl.org/perlop.html#Logical-or-and-Exclusive-Or
Автор: Igor ostrovsky Размещён: 03.10.2009 01:5518 плюса
Какие эмпирические правила вы используете, чтобы решить, какую конструкцию использовать, и убедитесь, что код делает то, что вы думаете, он делает
Оператор старшинство правил.
||
крепко or
связывает, слабо связывает. Там нет "правила большого пальца".
Если вам необходимо иметь практическое правило, как насчет «использовать только or
тогда, когда lvalue отсутствует»:
or
:
open my $fh, '>', 'file' or die "Failed to open file: $!"
||
:
my $greeting = greet() || $fallback || 'OH HAI';
Я согласен с MJD о том, чтобы избегать прощения если вы не знаете правил, посмотрите их ... но не пишите (open(my $fh, '>', 'file')) or (die("Failed to open file: $!"))
"просто чтобы быть уверенным", пожалуйста.
6 плюса
В Perl 5 «или» и «и» имеют более низкий приоритет, чем «||» а также "&&". Проверьте эту ветку PerlMonks для получения дополнительной информации:
http://www.perlmonks.org/?node_id=155804
Автор: perimosocordiae Размещён: 03.10.2009 01:531 плюс
Обе версии имеют короткое замыкание в Perl, но «текстовые» формы («и» и «или») имеют более низкий приоритет, чем их эквиваленты в стиле C.
http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlop.html#Logical_And
Автор: Ed S. Размещён: 03.10.2009 01:531 плюс
Я думаю, что or3 отличается.
Я на самом деле не Perl, но похоже, что 1, 2 и 4 явно возвращают логические значения. Я предполагаю, что у 3 есть побочные эффекты, такие как возврат $ a или что-то сумасшедшее.
смотрит вниз
Привет, я был прав.
Автор: Stefan Kendall Размещён: 03.10.2009 01:46Вопросы из категории :
- perl Как определить, имеет ли переменная число в Perl?
- perl Как я могу проверить STDIN без блокировки в Perl?
- perl Как выполнить подстановку Perl для строки, сохранив оригинал?
- perl Какой самый простой способ установить отсутствующий модуль Perl?
- perl Что происходит с Perl 6?
- perl Как запустить интерактивную консоль для Perl?
- perl Как я могу создать XML из Perl?
- perl Какой лучший движок XSLT для Perl?
- perl Что "select ((select (s), $ | = 1) [0])" делает в Perl?
- perl Как я могу получить длину строки в Perl?
- short-circuiting Есть ли условный троичный оператор в VB.NET?
- short-circuiting Обязательны ли короткие замыкания логических операторов? А порядок оценки?
- short-circuiting В чем разница между & и && в MATLAB?
- short-circuiting В чем разница между операторами Perl (или, и) и (||, &&)?
- short-circuiting C++ short-circuiting of booleans
- short-circuiting Использует ли Objective-C оценку короткого замыкания?
- short-circuiting Ярлык выполнения SQL-запроса ИЛИ логика?
- short-circuiting Поддерживает ли Python короткое замыкание?
- short-circuiting Оценка короткого замыкания - это гарантировано? [C #]
- short-circuiting Как избежать оценки короткого замыкания в C # при выполнении той же функциональности