Вопрос

У меня есть хак, который мне нужно использовать в этих условиях:

  • Это последняя страница данных.
  • К тому же это не первая страница.
  • Четного количества элементов данных не существует.

Итак, я попробовал этот код:

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

Я пробовал различные комбинации круглых скобок, чтобы сделать это правильно, но, похоже, ничего не работает.

Это было полезно?

Решение

Хорошо, приоритет оператора. and имеет почти самый низкий приоритет из всех операторов в Perl, поэтому Perl вычислял выражение в странном порядке.Переключение на && вместо этого я получил правильные результаты.Бларг.

Чем больше Вы Знаете.

Редактировать:
Как указал Филип Поттер ниже, Лучшие практики Perl (стр.70) рекомендует всегда использовать &&,||, ! для логических условий - ограничение and or и not для потока управления из-за их низкого приоритета.(И это даже заходит так далеко, что говорится о том, чтобы никогда не использовать and и not, только or для запасной логики.)
Всем спасибо!

Другие советы

Заключите RHS в круглые скобки:

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

Задание (=) имеет более высокий приоритет по сравнению с and оператор.Вы можете взглянуть на Приоритет оператора Perl.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top