代码之家  ›  专栏  ›  技术社区  ›  wes

这个Perl布尔语法有什么问题?

  •  3
  • wes  · 技术社区  · 15 年前

    我有在这些条件下需要雇用的黑客:

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

    所以我尝试了这个代码:

    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...
    

    我试过各种各样的括号组合以使它正确,但似乎没有任何效果。

    2 回复  |  直到 13 年前
        1
  •  14
  •   wes    15 年前

    好的,运算符优先级。 and 与Perl中的任何运算符相比,它的优先级几乎最低,因此Perl对表达式的计算顺序很奇怪。切换到 && 相反,我得到了正确的结果。布拉克

    The More You Know .

    编辑:
    正如菲利普·波特在下面指出的那样, Perl最佳实践 (p.70)建议始终使用 &&,||, ! 对于布尔条件-限制 and or not 因为控制流的优先级较低。(甚至可以说永远不要使用 ,只有 or 用于回退逻辑。)
    谢谢大家!

        2
  •  7
  •   codaddict    15 年前

    将右侧围在括号内:

    my $use_hack = (
       $last_page_number == $current_page_number and
       $page_number != 1 and
       $total_items % $items_per_page != 0);
    

    工作分配( = )与相比具有更高的优先级 and 操作员。你可以看看 Perl Operator Precedence .