ما الخطأ في بناء جملة Perl Boolean هذا؟
-
19-09-2019 - |
سؤال
لدي اختراق أحتاج إلى التوظيف في ظل هذه الشروط:
- إنها الصفحة الأخيرة من البيانات.
- انها ليست الصفحة الأولى، إما.
- ليس هناك عدد من عناصر البيانات وحجمها.
لذلك حاولت هذا الرمز:
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
لديه تقريبا أدنى الأسبقية من أي مشغل في بيرل، لذلك كان بيرل تقييم التعبير في ترتيب غريب. التبديل إلى &&
بدلا من ذلك حصلت لي النتائج الصحيحة. blarg.
تعديل:
كما أشار فيليب بوتر أدناه، بيرل أفضل الممارسات (P.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
المشغل أو العامل. يمكنك إلقاء نظرة على أسبقية مشغل بيرل.