Γενικά μοιραία σφάλματα#

die του χρόνου εκτέλεσης που δεν είναι ούτε σφάλματα μεταγλώττισης regex ούτε συντακτικά σφάλματα μεταγλώττισης: επίλυση μεθόδων, κληρονομικότητα, κλήσεις υπορουτινών, γνωρίσματα, και σφάλματα χρήσης σε επίπεδο αρθρώματος. Όλα είναι μοιραία (F) και παγιδεύσιμα με eval ή try.

Κλήσεις υπορουτινών#

`Undefined subroutine &%s called`#

(F) Μια κλήση ονομάτισε μια υπορουτίνα που δεν υπάρχει κατά τη στιγμή της κλήσης. Εμφανίζεται το πλήρως προσδιορισμένο όνομα. Αιτίες: ένα τυπογραφικό λάθος στο όνομα, ένα απόν use του αρθρώματος που την ορίζει, ή κλήση πριν δηλωθεί η sub σε ένα περιβάλλον όπου αυτό έχει σημασία. Η μορφή χρόνου εκτέλεσης `Undefined subroutine &NAME called at FILE line N.` προσθέτει το σημείο κλήσης.

Επίλυση μεθόδων και κληρονομικότητα#

`Can't use anonymous symbol table for method lookup`#

(F) Η αποστολή μεθόδου έφτασε σε ένα πακέτο χωρίς ονομασμένο πίνακα συμβόλων (ένα ανώνυμο stash). Μια blessed αναφορά πρέπει να δείχνει σε ένα πραγματικό, ονομασμένο πακέτο για να επιλύονται οι κλήσεις μεθόδων.

`Recursive inheritance detected in package '%s'`#

(F) Η αλυσίδα @ISA μιας κλάσης οδηγεί πίσω στον εαυτό της - ένας κύκλος. Η επίλυση μεθόδων δεν μπορεί να προχωρήσει. Σπάστε τον βρόχο στον γράφο κληρονομικότητας.

`Inconsistent hierarchy during C3 merge of class '%s'`#

(F) Υπό τη σειρά επίλυσης μεθόδων C3, η γραμμικοποίηση των γονέων αυτής της κλάσης δεν έχει συνεπή διάταξη. Δύο γονείς διαφωνούν ως προς τη σειρά ενός κοινού προγόνου. Αναδιαρθρώστε την κληρονομικότητα ώστε οι διατάξεις των γονέων να είναι συμβατές, ή επαναφέρετε την κλάση στην προεπιλεγμένη MRO κατά βάθος.

`Invalid mro name: '%s'`#

(F) Ένα use mro '...' ονομάτισε μια σειρά που δεν υπάρχει. Τα δύο έγκυρα ονόματα είναι `dfs` (η προεπιλεγμένη σειρά κατά βάθος) και `c3`.

Γνωρίσματα#

`Unterminated attribute parameter in attribute list`#

(F) Ένα γνώρισμα με παράμετρο σε παρενθέσεις - :Foo(bar - δεν έκλεισε. Ισορροπήστε τις παρενθέσεις στη λίστα γνωρισμάτων.

Σφάλματα χρήσης αρθρωμάτων#

Αυτά προέρχονται από native αρθρώματα όταν καλούνται λανθασμένα. Είναι μοιραία επειδή η κλήση δεν μπορεί να προχωρήσει.

`Usage: POSIX::sprintf(pattern, args...)`#

(F) Μια συνάρτηση POSIX κλήθηκε με λανθασμένα ορίσματα. Το μήνυμα ονομάζει τη σωστή μορφή κλήσης.

`IO::Socket::%s`#

(F) Μια λειτουργία IO::Socket απέτυχε· το μήνυμα ονομάζει τη συγκεκριμένη κλήση.

Δείτε επίσης#

  • @ISA - ο πίνακας κληρονομικότητας στο περιεχόμενο του οποίου αναφέρονται τα σφάλματα MRO.

  • mro - επιλογή και επιθεώρηση της σειράς επίλυσης μεθόδων.

  • bless - συσχετίζει μια αναφορά με το πακέτο στις μεθόδους του οποίου αναφέρεται το σφάλμα ανώνυμου πίνακα συμβόλων.

  • Σφάλματα τιμών και τύπων - το «Not a subroutine reference» και τα υπόλοιπα διαγνωστικά για το τι είδους τιμή είναι κάτι.