Domanda

Ho hackero ho bisogno di impiegare in queste condizioni:

  • E 'l'ultima pagina di dati.
  • Non è la prima pagina, neanche.
  • Non c'è un numero di pagina a grandezza naturale, anche di elementi di dati.

Così ho provato questo codice:

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

E continuo a ricevere questo Useless use of numeric ne (!=) in void context avvertimento circa l'ultima condizione e sta valutando vero quando $total_items % $items_per_page = 0.

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

Ho provato varie combinazioni di parentesi per farlo bene, ma nulla sembra funzionare.

È stato utile?

Soluzione

D'accordo, precedenza degli operatori. and ha quasi la precedenza più basso di qualsiasi operatore in Perl, quindi Perl stava valutando l'espressione in un ordine strano. Il passaggio a && invece mi ha fatto risultati corretti. Blarg.

più si conosce .

EDIT:
Come Philip Potter ha sottolineato di seguito, Perl Best Practices (p.70) raccomanda di usare sempre &&,||, ! per le condizioni booleane - limitando and or e not per il flusso di controllo a causa della loro bassa la precedenza. (E si spinge fino a dire non usare mai per and e not, solo or per la logica di fallback.)
Grazie a tutti!

Altri suggerimenti

Racchiudere il RHS tra parentesi:

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

Assegnazione (=) sta avendo precedenza maggiore rispetto a and operatore. Si può dare un'occhiata alla Perl Precedenza degli operatori .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top