push#
Προσαρτά μία ή περισσότερες τιμές στο τέλος ενός πίνακα.
Η push προσθέτει κάθε στοιχείο της LIST στο τέλος του ARRAY, με τη σειρά. Είναι το ζευγαρωμένο αντίστοιχο της pop στην ουρά και των unshift / shift στην κεφαλή. Ο πίνακας μεγαλώνει επιτόπου· δεν επιστρέφεται νέος πίνακας.
Σύνοψη#
push @arr, $val
push @arr, @more
push @arr, list, of, values
push @$aref, $val
Τι επιστρέφεται#
Ο νέος αριθμός στοιχείων του ARRAY μετά την προσάρτηση - δηλαδή το scalar @arr όπως διαμορφώνεται μόλις επιστρέψει η push. Όχι οι ωθημένες τιμές, όχι το παλιό μήκος, όχι ο ίδιος ο πίνακας.
my @colors = ("red");
my $n = push @colors, "blue", "green"; # $n is 3
Χρήσιμο όταν η push και ο επακόλουθος έλεγχος μήκους θα ήταν διαφορετικά δύο δηλώσεις:
if (push @queue, $job > $limit) { ... } # one call, count + test
Παραδείγματα#
Βασική προσάρτηση μίας τιμής:
my @animals = ("cat");
push @animals, "mouse"; # ("cat", "mouse")
Προσάρτηση πολλαπλών τιμών σε μία κλήση - κάθε όρισμα γίνεται δικό του στοιχείο:
my @colors = ("red");
push @colors, "blue", "green"; # ("red", "blue", "green")
Προσάρτηση των περιεχομένων άλλου πίνακα. Ο δεύτερος πίνακας ισοπεδώνεται στη λίστα, οπότε προσαρτώνται τα στοιχεία του, όχι ο πίνακας ως μονό στοιχείο:
my @a = (1, 2);
my @b = (3, 4);
push @a, @b; # (1, 2, 3, 4)
Πειθαρχία ουράς - push στην ουρά, shift στην κεφαλή:
my @queue;
push @queue, $job; # enqueue
my $next = shift @queue; # dequeue
Πειθαρχία στοίβας - push και pop στο ίδιο άκρο:
my @stack;
push @stack, $frame; # enter
my $top = pop @stack; # leave
Push σε πίνακα που κρατείται μέσω αναφοράς. Η αναφορά πρέπει να αποαναφερθεί με @{ ... } (ή τη σύντομη μορφή @$ref) πριν η push δει πίνακα:
my $aref = [1, 2];
push @$aref, 3; # $aref now refers to [1, 2, 3]
push @{ $aref }, 4, 5; # same, explicit deref
Μέτρηση στοιχείων μετά την προσάρτηση χωρίς προσωρινή μεταβλητή:
my $size = push @log, $entry;
warn "log is large: $size entries" if $size > 1000;
Οριακές περιπτώσεις#
Το arrayref χρειάζεται αποαναφορά. Το
push $ref, $xείναι σφάλμα μεταγλώττισης στην Perl 5.24+. Χρησιμοποιήστεpush @$ref, $xήpush @{ $ref }, $x. Ένα πειραματικό χαρακτηριστικό επέτρεπε βαθμωτό πρώτο όρισμα στις 5.14–5.22 και αφαιρέθηκε· μην βασίζεστε σε αυτό.Τα ορίσματα πίνακα ισοπεδώνονται αυτόματα. Η
push @a, @bπροσαρτά τα στοιχεία του@bμεμονωμένα. Για να προσαρτήσετε το@bως μία εμφωλευμένη εγγραφή χρειάζεστε arrayref:push @a, \@bήpush @a, [ @b ].Και τα ορίσματα hash ισοπεδώνονται. Η
push @a, %hπροσαρτά εναλλάξ κλειδιά και τιμές με τη σειρά επανάληψης του hash - σχεδόν ποτέ αυτό που θέλετε. Χρησιμοποιήστεpush @a, \%hγια να αποθηκεύσετε το hash μέσω αναφοράς.Περιβάλλον λίστας αλλά βαθμωτή επιστροφή. Η
pushτεκμηριώνεται ότι δέχεταιLISTκαι επομένως αποτιμά τα ορίσματά της σε περιβάλλον λίστας, αλλά η τιμή που η ίδια ηpushπαράγει είναι πάντα ο προκύπτων αριθμός. Μέσα σεprint push @a, @bεκτυπώνεται ο αριθμός, όχι ο πίνακας.Κενή
LIST. Ηpush @a;(χωρίς δεύτερο όρισμα) είναι no-op και επιστρέφει το τρέχονscalar @a. Νόμιμη και περιστασιακά χρήσιμη για το «δώσε μου τον αριθμό χωρίς να τροποποιήσεις τίποτα» - αν και τοscalar @aείναι σαφέστερο.Tied πίνακες. Η
pushσε tied πίνακα καλεί τηνPUSHστο tied αντικείμενο αν είναι ορισμένη· διαφορετικά καταφεύγει σε επαναλαμβανόμενες κλήσειςSTOREσε θέσεις παραγόμενες απόFETCHSIZE. Δείτε τοperltie.Αυτο-δημιουργία. Η
pushμέσω αναφοράς με τιμή undef δημιουργεί έναν ανώνυμο πίνακα:my %index; push @{ $index{$key} }, $value; # $index{$key} becomes an arrayref
Μετά την πρώτη
push, το$index{$key}κρατά arrayref που περιέχει το$value. Αυτό είναι το τυπικό ιδίωμα για τη σταδιακή δόμηση ενός hash-of-arrays.Πίνακας μόνο για ανάγνωση. Η push σε πίνακα μόνο για ανάγνωση ή σταθερού μεγέθους (π.χ. στοιχείο του
@_δεσμευμένο σε μεταβλητή του καλούντος, ή πίνακας κλειδωμένος μεHash::Util::lock_value) εγείρειModification of a read-only value attempted.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
pop- αφαιρεί και επιστρέφει το τελευταίο στοιχείο· ζευγαρωμένη με τηνpushσχηματίζει στοίβαshift- αφαιρεί και επιστρέφει το πρώτο στοιχείο· ζευγαρωμένη με τηνpushσχηματίζει ουράunshift- η κατοπτρική εικόνα τηςpushστην κεφαλή του πίνακα· επιστρέφει το νέο μήκος με τον ίδιο τρόποsplice- εισαγωγή, αφαίρεση, ή αντικατάσταση οποιουδήποτε εύρους· ηpush @a, @bείναι ισοδύναμη μεsplice @a, scalar @a, 0, @bscalar- επιβολή βαθμωτού περιβάλλοντος σε πίνακα όταν θέλετε τον αριθμό χωρίςpush@ARGV- ο κανονικός πίνακας στον οποίο τα περισσότερα προγράμματα κάνουνpushή τον καταναλώνουν μεshift