Ειδικές μεταβλητές#
Η 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,<>, …).-
the regex language behind the match variables.
Boolean Logic for Perl Programmers
the conceptual companion for the
||///defaulting idioms that recur throughout this reference.