# Διαγνωστικά μηνύματα Όταν ένα πρόγραμμα πάει στραβά, η Perl σας ενημερώνει γι” αυτό. Ορισμένα διαγνωστικά σταματούν το πρόγραμμα (μοιραία σφάλματα τύπου `die`)· άλλα εκτυπώνουν μια γραμμή στο `STDERR` και το αφήνουν να συνεχίσει (προειδοποιήσεις). Αυτή η αναφορά παραθέτει τα διαγνωστικά που εκπέμπει η PetaPerl, ομαδοποιημένα ανάλογα με το από πού προέρχονται, μαζί με την αιτία και τη διόρθωση για το καθένα. Κάθε καταχώριση δείχνει το **μήνυμα αυτολεξεί** μέσα σε ένα code span - το ακριβές κείμενο που εκτυπώνει ο διερμηνέας, με τα σύμβολα κράτησης θέσης (`%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**) ελέγχονται από την pragma `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 - δεν προκύπτουν επομένως εδώ. Όπου η upstream 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) - επίλυση μεθόδων, αναφορές, αριθμητική, περιορισμένα hashes, filehandles, και τα υπόλοιπα `die` του χρόνου εκτέλεσης που δεν αφορούν ειδικά regex ή τον αναλυτή. - [Σφάλματα μεταγλώττισης regex](perldiag/fatal-regex.md) - οτιδήποτε απορρίπτει ο μεταγλωττιστής μοτίβων, από το `Unmatched )` μέχρι τις κακοσχηματισμένες κατασκευές `\g`, `\N`, `\o`, και `(?...)`. - [Συντακτικά σφάλματα κατά τη μεταγλώττιση](perldiag/fatal-syntax.md) - σφάλματα που εγείρουν ο αναλυτής και η παραγωγή κώδικα πριν εκτελεστεί το πρόγραμμα. - [Προειδοποιήσεις](perldiag/warnings.md) - τα μη μοιραία διαγνωστικά: βαθιά αναδρομή, ευρείς χαρακτήρες, άχρηστες κατασκευές. - [Σφάλματα τιμών και τύπων](perldiag/value-and-types.md) - διαγνωστικά για το τι είναι και τι δεν είναι μια τιμή: όχι αναφορά, όχι αναφορά κώδικα, διαίρεση με το μηδέν, πρόσβαση σε περιορισμένο hash. - [Εσωτερικά σφάλματα](perldiag/internal.md) - τα panics που σηματοδοτούν ένα σφάλμα στην ίδια την pperl. - [Διαγνωστικά ειδικά για το pperl](perldiag/pperl-specific.md) - μηνύματα που εκπέμπει η PetaPerl και τα οποία δεν έχουν αντίστοιχο στην upstream Perl.