# לוגיקה בוליאנית למתכנתי Perl — הדרכה כמעט כל שורה של Perl פועל מעוצבת על ידי לוגיקה בוליאנית. `open ... or die`, `$h{$k} //= []`, `unless ($a == $b && $c eq $d)`, `/^(yes|no)$/`, `$flags & 0x4` — כולן אותה חופן פעולות מיושמות בתחומים שונים. הדרכה זו עוברת על פעולות אלה מן היסוד: מהי משמעות האמת ב־Perl, מה האופרטורים מחזירים בפועל, כל שש־עשרה פונקציות האמת הבינאריות וכיצד לכתוב כל אחת מהן ב־Perl, שני החוקים ההופכים תנאים מסובכים לפשוטים, ושלושת המקומות שבהם לוגיקה מופיעה לרוב: אריתמטיקה ביטית, ביטויים רגולריים, וזרימת בקרה. ## למי זה מיועד אתם כבר כותבים Perl פועל. אתם משתמשים ב־`&&`, `||`, `if`, `unless` בלי לחשוב — אך כאשר תנאי גדל מעבר לשלוש או ארבע פסוקיות אתם מפסיקים לבטוח בו, ופונים לסוגריים שאתם חושדים שאינם נחוצים. הדרכה זו סוגרת את הפער הזה. לאחר שתקראו אותה, תדעו בדיוק איזו פעולה לוגית ביטוי נתון מבצע, מדוע שתי צורות שנראות שונות הן אותו ביטוי, וכיצד לצמצם `unless` מסובך ל־`if` נקי בביטחון במקום בניסוי וטעייה. ## היקף לוגיקה בוליאנית קלאסית בעלת שני ערכים — אמת ושקר, נקודה. ה־`undef` של Perl מציג ערך שלישי (ה־ *לא ידוע*) ומשפחה שלמה של ניבים תלת־ערכיים (`defined`, `//`, `//=`). אלה מוזכרים במקומות שבהם הם משיקים ללוגיקה הדו־ערכית, אך טיפול ראוי בלוגיקה תלת־ערכית היה מכפיל את גודל ההדרכה הזו מבלי לסיים אותה; זהו מדריך נפרד. ## כיצד הדרכה זו מאורגנת כל פרק הוא מושג אחד. קראו אותם לפי הסדר במעבר הראשון; קפצו לפרק הרלוונטי בשלב מאוחר יותר כאשר אתם מחפשים עובדה. * [אמיתיוּת](truthiness.md) * [אופרטורים](operators.md) * [טבלאות אמת](truth-tables.md) * [חוקי דה־מורגן](de-morgan.md) * [שלמות פונקציונלית](functional-completeness.md) * [יישומים](applications.md) ## מה תוכלו לעשות לאחר הקריאה - להסתכל על כל ביטוי בוליאני בקוד מקור של Perl ולנקוב בשם פונקציית האמת שהוא מחשב. - להמיר בין ארבע הצורות השקולות של גרירה (`a → b`, `!a || b`, `!(a && !b)`, ההיפוך הניגודי) מבלי להיאלץ לחשוב. - לצמצם `unless` עם שתי תת־פסוקיות שלוליות ל־`if` שטוח בצעד מכני אחד. - לזהות מתי חלופה ב־regex היא OR לוגי על קבוצות ומתי זוג lookaround הוא AND לוגי, ולהשתמש במסגור זה כדי לקרוא ביטויים רגולריים מסובכים. - להשתמש באופרטורים הביטיים כדי לקבוע, לאפס, להחליף ולבדוק דגלים בודדים מבלי לעיין במדריך עיון. - לבחור את ניב הקיצור הנכון (`||`, `//`, `||=`, `//=`, `or die`) למצב, תוך ידיעה מדוע כל אחד מהם עובד.