3

私はこれらの条件下で採用する必要があるハックを持っています:

  • データの最後のページです。
  • 最初のページでもありません。
  • ページサイズ偶数のデータ項目はありません。

だから私はこのコードを試しました:

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 の場合に評価されます$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 のベスト プラクティス(p.70) では、優先順位が低いため、&&,||, !ブール条件 - 制限and orと制御フローに常に使用することをお勧めします。(そして、フォールバック ロジックのためだけにandnotを使用しないとさえ言っています。) 皆さん、ありがとう!andnotor

于 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);

代入 ( ) は、演算子=と比較して優先度が高くなっています。Perl Operator Precedenceandを見ることができます。

于 2010-03-10T05:13:05.153 に答える