3

在这些条件下,我需要使用 hack:

  • 这是最后一页数据。
  • 这也不是第一页。
  • 没有页面大小的偶数数据项。

所以我尝试了这段代码:

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有关最后一个条件的警告,并且它正在评估 true when $total_items % $items_per_page = 0

say 'NOT EVEN' if $total_items % $items_per_page != 0;  #works properly, though...

我尝试了各种括号组合以使其正确,但似乎没有任何效果。

4

2 回答 2

14

好的,运算符优先级。and在 Perl 中几乎所有运算符的优先级最低,因此 Perl 以奇怪的顺序计算表达式。改为&&改为让我得到正确的结果。布拉格。

你知道的越多

编辑:
正如 Philip Potter 在下面指出的,Perl Best Practices (p.70) 建议始终使用&&,||, !布尔条件 - 限制and ornot控制流,因为它们的优先级较低。(甚至可以说永远不要使用andand not,仅or用于回退逻辑。)
谢谢大家!

于 2010-03-10T05:14:24.073 回答
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

于 2010-03-10T05:13:05.153 回答