我需要在这些条件下使用黑客:
所以我尝试了这段代码:
my $use_hack =
$last_page_number == $current_page_number and
$page_number != 1 and
$total_items % $items_per_page != 0;
我不断收到关于最后一个条件的警告Useless use of numeric ne (!=) in void context
,并且在$total_items % $items_per_page = 0
时评估为真。
say 'NOT EVEN' if $total_items % $items_per_page != 0; #works properly, though...
我尝试了各种括号组合来使它正确,但似乎没有任何效果。
答案 0 :(得分:14)
好的,运营商优先。 and
几乎是Perl中任何运算符的最低优先级,因此Perl以奇怪的顺序评估表达式。切换到&&
反而得到了正确的结果。 Blarg。
编辑:
正如Philip Potter在下面指出的那样, Perl最佳实践(p.70)建议始终使用&&,||, !
作为布尔条件 - 限制and or
和not
用于控制流程,因为他们的低优先权。 (它甚至可以说永远不会使用and
和not
,只有or
用于后备逻辑。)
谢谢大家!
答案 1 :(得分:7)
将RHS括在括号中:
my $use_hack = (
$last_page_number == $current_page_number and
$page_number != 1 and
$total_items % $items_per_page != 0);
与=
运算符相比,赋值(and
)具有更高的优先级。您可以查看Perl Operator Precedence。