Ειδικές μεταβλητές#

Η Perl διαθέτει ένα σταθερό σύνολο ενσωματωμένων μεταβλητών που συμπληρώνονται, διαβάζονται, ή τηρούνται από την ίδια τη γλώσσα. Μερικές κρατούν κατάσταση από την τελευταία λειτουργία (οι μεταβλητές αντιστοίχισης regex, $!, $@)· μερικές ρυθμίζουν τη συμπεριφορά ενσωματωμένων ($/, $\, $,)· μερικές εκθέτουν τον τρέχοντα διερμηνέα και το περιβάλλον του ($^V, $^O, %ENV, @INC)· μερικές δεν είναι πραγματικά μεταβλητές αλλά hooks σε υπηρεσίες χρόνου εκτέλεσης (%SIG).

Η PetaPerl υλοποιεί κάθε ειδική μεταβλητή που τεκμηριώνει η Perl 5.42, με πανομοιότυπη σημασιολογία. Όπου ο χρόνος εκτέλεσης κάνει κάτι αξιοσημείωτο δικό του - μια ταχεία διαδρομή JIT που διαβάζει ένα αποθηκευμένο κελί, μια συμβολοσειρά COW με Arc για τη $_ - αυτό είναι λεπτομέρεια υλοποίησης· η ορατή στον χρήστη συμπεριφορά ταιριάζει με τη perl5.

Αυτή η αναφορά είναι χωρισμένη σε μία σελίδα ανά οικογένεια. Μεταβλητές που μοιράζονται πλαίσιο (σχεδόν ποτέ δεν θέτετε τη $, χωρίς να σκεφτείτε τη $\ και τη $|) βρίσκονται στην ίδια σελίδα· μεταβλητές που δεν μοιράζονται (ID διεργασιών και συλλήψεις regex) δεν βρίσκονται.

Επιλέξτε οικογένεια#

  • Προεπιλεγμένες μεταβλητές - $_, @_. Ο σιωπηρός τελεστέος των περισσότερων ενσωματωμένων· ο πίνακας ορισμάτων κάθε sub.

  • Ταυτότητα διεργασίας - $0, $$, $<, $>, $(, $). Όνομα προγράμματος, PID, πραγματικά και effective UIDs/GIDs.

  • Κατάσταση σφάλματος - $!, $@, $?, $^E. Οι τέσσερις μεταβλητές σφάλματος, κάθε μία αναφέρει από διαφορετικό στρώμα (βιβλιοθήκη C, eval/die, διεργασία-παιδί, επεκτεταμένο OS).

  • Κατάσταση filehandle και εκτύπωσης - $/, $\, $,, $", $|, $., $;. Διαχωριστής εγγραφών εισόδου, διαχωριστές εξόδου, αυτόματη εκκένωση, μετρητής γραμμών, ενωτικό δεικτών.

  • Μεταβλητές αντιστοίχισης regex - $&, $`, $', $1..$N, %+, %-, @+, @-. Το αποτέλεσμα της τελευταίας επιτυχημένης αντιστοίχισης· η ιστορία απόδοσης πίσω από τη $& και τις σχετικές.

  • Ενδοσκόπηση διερμηνέα - $], $^V, $^O, $^X, $^T, $^W, $^I, $^P. Έκδοση, OS, διαδρομή εκτελέσιμου, χρόνος βάσης, προειδοποιήσεις, επιτόπια επεξεργασία, σημαίες αποσφαλματωτή.

  • Είσοδος προγράμματος - @ARGV, %ENV, @INC, %INC, $0. Πώς το σενάριο λαμβάνει τα ορίσματά του, το περιβάλλον, και τη διαδρομή αναζήτησης αρθρωμάτων· η ιστορία use lib έναντι unshift @INC.

  • Χειρισμός σημάτων - %SIG, $SIG{__WARN__}, $SIG{__DIE__}. Τα σήματα που μπορείτε να πιάσετε, ο κανόνας ασφαλών σημάτων, και η τυπική μορφή ομαλού τερματισμού.

Χώροι ονομάτων μεταβλητών#

Κάθε ειδική μεταβλητή ζει σε έναν συγκεκριμένο χώρο ονομάτων. Οι περισσότερες βρίσκονται στο main::· μερικές (@F, @ISA) είναι τοπικές πακέτου. Η τεκμηρίωση κάθε μεταβλητής αναφέρει ποιον.

Η σύμβαση ονομάτων είναι μια επιλογή σημείου στίξης και ένα sigil:

  • $<digit> - μεταβλητές σύλληψης regex.

  • $<symbol> - μεταβλητές ενός χαρακτήρα ($_, $!, $@, $/, …).

  • $^<letter> - μεταβλητές γράμματος ελέγχου ($^V, $^W, $^X). Γράφονται με κυριολεκτικό caret ακολουθούμενο από κεφαλαίο γράμμα.

  • ${^NAME} - μεταβλητές εκτεταμένου ονόματος (${^GLOBAL_PHASE}, ${^CAPTURE}). Οι αγκύλες και το caret είναι απαραίτητα.

  • $NAME μετά από use English - το ονομαστικό ψευδώνυμο για σχεδόν κάθε μεταβλητή στίξης. Η $ERRNO είναι η $!, η $EVAL_ERROR είναι η $@, κ.λπ.

Το άρθρωμα English#

use English;            # all aliases, plus $PREMATCH/$MATCH/$POSTMATCH
use English qw( -no_match_vars );    # skip $`, $&, $' aliases

Η English παρέχει αναγνώσιμα ψευδώνυμα για τις μεταβλητές στίξης: $EVAL_ERROR για τη $@, $INPUT_RECORD_SEPARATOR για τη $/, και ούτω καθεξής. Τα ψευδώνυμα είναι πραγματικές μεταβλητές Perl που μοιράζονται αποθήκευση με τα πρωτότυπα - η ανάθεση σε ένα γράφει στο άλλο.

Η εισαγωγή -no_match_vars συνιστάται σε κώδικα που δεν χρειάζεται ρητά τα $&, $`, ή $'. Δείτε μεταβλητές αντιστοίχισης regex για τον ιστορικό λόγο απόδοσης και γιατί δεν έχει πλέον σημασία σε σύγχρονες εκδόσεις perl.

Αυτή η σελίδα αναφέρει τις μορφές στίξης παντού επειδή ο περισσότερος κώδικας στην πράξη γράφεται έτσι. Τα ψευδώνυμα English σημειώνονται δίπλα στις σελίδες οικογένειας όπου είναι χρήσιμα.

Τοπικοποίηση ειδικών μεταβλητών#

Σχεδόν κάθε ειδική μεταβλητή που ελέγχει τη συμπεριφορά μιας ενσωματωμένης ($/, $\, $,, $", $|, $_) είναι καθολική - θέστε την σε ένα σημείο και κάθε άλλο κομμάτι κώδικα στην ίδια διεργασία βλέπει την αλλαγή. Το τυπικό ιδίωμα για «χρειάζομαι διαφορετική τιμή μόνο γι” αυτό το μπλοκ» είναι η local:

sub slurp {
    my ($path) = @_;
    open my $fh, '<', $path or die "open $path: $!";
    local $/;                         # slurp mode, only inside this sub
    return <$fh>;
}

Χωρίς τη local, η $/ του καλούντος θα αλλοιωνόταν μόνιμα. Η local αποθηκεύει την τρέχουσα τιμή, θέτει τη νέα, και επαναφέρει την παλιά τιμή όταν εξέλθει η περικλείουσα εμβέλεια - ακόμα και σε εξαίρεση. Αυτό ισχύει για κάθε ειδική μεταβλητή στις σελίδες οικογένειας, εκτός από τις μόνο-ανάγνωσης (μεταβλητές αντιστοίχισης regex, τυπικό όρισμα της $0, μεταβλητές έκδοσης).

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

  • perlop - κάθε τελεστής που διαβάζει ή γράφει μια ειδική μεταβλητή ως μέρος του ορισμού του (σύνδεση regex, εκτύπωση, εύρος, σύγκριση).

  • perlfunc - ενσωματωμένες συναρτήσεις, σχεδόν όλες οι οποίες διαβάζουν μια προεπιλογή από μία από αυτές τις μεταβλητές όταν κληθούν χωρίς όρισμα (chomp, chop, print, lc, length, <>, …).

  • Regular expressions guide

    • the regex language behind the match variables.

  • Boolean Logic for Perl Programmers

    • the conceptual companion for the ||/// defaulting idioms that recur throughout this reference.