На компе недавно обновился перл до версии 5.20 и в рабочем коде словил варнинг "Possible precedence issue with control flow operator". Гугление показало, то, оказывается, перл код вида
sub mysub {
my ( $a, $b ) = @_;
return $a or $b;
}
интерпретатором будет воспринят как
sub mysub {
my ( $a, $b ) = @_;
( return $a ) or $b;
}
т.е. функция/метод всегда будет возвращать $a в не зависимости от того, истиннен он или ложен. Поэтому в данном случае надо использовать оператор || вместо or хотя я всегда считал, что два обозначения одного и того же оператора.
И в итоге наша функция будет выглядеть так:
sub mysub {
my ( $a, $b ) = @_;
return $a || $b;
}