# הודעות אבחון כאשר תוכנית משתבשת, Perl מודיע לך על כך. חלק מהודעות האבחון עוצרות את התוכנית (שגיאות קטלניות מסוג `die`); אחרות מדפיסות שורה אל `STDERR` ומאפשרות לה להמשיך לרוץ (אזהרות). מקור זה מפרט את הודעות האבחון ש־PetaPerl פולט, מקובצות לפי מקורן, עם הסיבה והתיקון לכל אחת. כל ערך מציג את **ההודעה כלשונה** בתוך code span - הטקסט המדויק שהמפרש מדפיס, עם ה־placeholders (`%s`, `%d`, משתנה בעל שם) מוצגים באופן שבו הם מופיעים בפלט. חפשו בעמוד זה את המילים המילוליות שראיתם ב־`STDERR` ותגיעו אל הערך המתאים. ## קריאת ערך כל ערך נפתח בטקסט ההודעה, לאחר מכן תג סיווג קצר בסוגריים, ולאחר מכן הסיבה והתיקון: > ``Illegal division by zero``   **(F)** חילקת באפס. הגן על המחלק. התג עוקב אחר אותו קוד אות ש־Perl השתמש בו מאז ומתמיד: | קוד | משמעות | |-------|---------------------------------------------------------------------------------------------| | **W** | אזהרה - מודפסת רק כאשר אזהרות מופעלות. אופציונלית מוגבלת לקטגוריה (מוצגת כ־`(W category)`). | | **D** | הוצאה משימוש - אזהרה שתכונה בדרכה החוצה. | | **S** | אזהרה חמורה - מופעלת כברירת מחדל, אך עדיין רק אזהרה. | | **F** | שגיאה קטלנית - התוכנית מתה אלא אם השגיאה נלכדת (`eval`, `try`). | | **P** | שגיאה פנימית (panic) - לעולם לא אמורה להגיע אל משתמש. אם אתה רואה אחת כזו, זהו באג ב־pperl. | | **X** | שגיאה קטלנית מאוד - התוכנית יוצאת מיד. | | **A** | שגיאה זרה - מופקת על ידי משהו אחר מלבד Perl עצמו. | ## הפעלה והשתקה של אזהרות אזהרות (המחלקות **W**, **D**, ו־**S**) נשלטות על ידי הפרגמה `warnings`. בלעדיה, רק האזהרות החמורות (**S**) מודפסות: ```perl use warnings; # turn on every warning no warnings; # turn them all off (lexically) no warnings 'uninitialized'; # turn off one category use warnings FATAL => 'all'; # promote warnings to fatal errors ``` הקטגוריה הנקובה בתג `(W category)` היא המחרוזת שמעבירים אל `no warnings` כדי להשתיק רק את הודעת האבחון הזו. מטפל `$SIG{__WARN__}` יחיד יכול ליירט כל אזהרה בזמן ריצה; `$SIG{__DIE__}` עושה את אותו הדבר עבור שגיאות קטלניות. ראו [`%SIG`](perlvar/signals.md). ## הערה על ניידוּת PetaPerl פועל רק על Linux ואינו כולל שכבת XS. משפחות הודעות האבחון התלויות בפלטפורמה שׁ־perl נייד נושא - קודי סטטוס של VMS, טקסט `GetLastError` של Win32, הודעות ”unimplemented on this architecture“, כשלי XS-loader - לכן אינן עולות כאן. במקום שבו Perl המקורי מתעד הודעת אבחון שעולה רק במערכת הפעלה אחרת או דרך XS, PetaPerl פשוט לעולם אינו פולט אותה. ## הודעות האבחון * [שגיאות קטלניות כלליות](perldiag/fatal-general.md) * [שגיאות הידור של regex](perldiag/fatal-regex.md) * [שגיאות תחביר בזמן הידור](perldiag/fatal-syntax.md) * [אזהרות](perldiag/warnings.md) * [שגיאות ערך וטיפוס](perldiag/value-and-types.md) * [שגיאות פנימיות](perldiag/internal.md) * [אבחונים ייחודיים ל־pperl](perldiag/pperl-specific.md) - [שגיאות קטלניות כלליות](perldiag/fatal-general.md) - פתרון מתודות, הפניות, אריתמטיקה, האשים מוגבלים, מטפלי קובץ, ושאר ה־`die`ים בזמן ריצה שאינם ייחודיים ל־regex או למפענח. - [שגיאות הידור של regex](perldiag/fatal-regex.md) - כל מה שמהדר התבניות דוחה, מ־`Unmatched )` ועד `\g`, `\N`, `\o`, ומבני `(?...)` פגומים. - [שגיאות תחביר בזמן הידור](perldiag/fatal-syntax.md) - שגיאות שהמפענח ומחולל הקוד מעלים לפני שהתוכנית רצה. - [אזהרות](perldiag/warnings.md) - הודעות האבחון הלא־קטלניות: רקורסיה עמוקה, תווים רחבים, מבנים חסרי תועלת. - [שגיאות ערך וטיפוס](perldiag/value-and-types.md) - הודעות אבחון על מה שערך הוא ומה שאינו: לא הפניה, לא הפניית קוד, חלוקה באפס, גישה להאש מוגבל. - [שגיאות פנימיות](perldiag/internal.md) - ה־panicים שמסמנים באג ב־pperl עצמו. - [הודעות אבחון ייחודיות ל־pperl](perldiag/pperl-specific.md) - הודעות ש־PetaPerl פולט שאין להן מקבילה ב־Perl המקורי.