pop#
Αφαιρεί και επιστρέφει το τελευταίο στοιχείο ενός πίνακα.
Η pop συντομεύει τον πίνακα κατά ένα και σας παραδίδει το στοιχείο που αφαιρέθηκε. Ο πίνακας τροποποιείται επιτόπου. Χωρίς όρισμα, η pop δρα επί του @_ μέσα σε υπορουτίνα και επί του @ARGV οπουδήποτε αλλού - ο ίδιος προεπιλεγμένος στόχος όπως και της shift.
Σύνοψη#
pop @arr
pop @$aref
pop # default: @_ inside a sub, @ARGV outside
Τι επιστρέφεται#
Το στοιχείο που αφαιρέθηκε, ως βαθμωτό. Αν ο πίνακας ήταν κενός, η τιμή επιστροφής είναι undef και ο πίνακας παραμένει κενός - δεν αποτελεί σφάλμα και δεν εκπέμπει προειδοποίηση, οπότε κώδικας που καλεί πάντα pop σε βρόχο χρειάζεται δικό του έλεγχο τερματισμού.
my @empty;
my $x = pop @empty; # $x is undef, no warning
Σημειώστε ότι η pop επιστρέφει undef και όταν το τελευταίο στοιχείο ήταν undef. Οι δύο περιπτώσεις είναι μη διακρίσιμες μόνο από την τιμή επιστροφής· χρησιμοποιήστε @arr σε λογικό περιβάλλον, ή scalar @arr, για να τις ξεχωρίσετε πριν την κλήση pop.
my @arr = ('one', 'two', undef);
my $x = pop @arr; # $x is undef - but so would an empty pop be
Καθολική κατάσταση που επηρεάζει#
Η pop χωρίς όρισμα διαβάζει το @_ (μέσα σε υπορουτίνα) ή το @ARGV (σε εμβέλεια αρχείου, σε μπλοκ BEGIN/INIT/CHECK/END και μέσα σε eval STRING). Δεν αλληλεπιδρά με την $_, την $,, την $\ ή οποιαδήποτε άλλη μεταβλητή στίξης.
Παραδείγματα#
Βασική χρήση - αφαιρέστε το τελευταίο στοιχείο από έναν απλό πίνακα:
my @arr = ('cat', 'dog', 'mouse');
my $item = pop @arr; # $item is 'mouse'
# @arr is now ('cat', 'dog')
Στοίβα LIFO - push για προσθήκη, pop για αφαίρεση, και τα δύο στο ίδιο άκρο:
my @stack;
push @stack, 'a';
push @stack, 'b';
push @stack, 'c';
my $top = pop @stack; # 'c'; @stack is ('a', 'b')
Απορρίψτε το τελευταίο στοιχείο όταν δεν χρειάζεστε την τιμή του. Η pop σε κενό περιβάλλον είναι απολύτως έγκυρη και είναι ο ιδιωματικός τρόπος να εγκαταλείψετε την ουρά:
pop @arr; # shorten @arr by one, value thrown away
Προεπιλεγμένος στόχος μέσα σε υπορουτίνα - η pop χωρίς όρισμα κάνει pop από το @_, και έτσι μια υπορουτίνα ξεφλουδίζει το τελευταίο της όρισμα από τη λίστα ορισμάτων:
sub last_arg {
return pop; # pops from @_
}
last_arg(1, 2, 3); # returns 3
Pop μέσω αναφοράς πίνακα. Κάντε αποαναφορά με @$aref (ή @{ $aref } για οποιαδήποτε μη τετριμμένη έκφραση) και η pop λειτουργεί ακριβώς όπως σε επώνυμο πίνακα:
my $aref = [10, 20, 30];
my $x = pop @$aref; # 30; $aref now points to [10, 20]
Οριακές περιπτώσεις#
Ο κενός πίνακας επιστρέφει
undef, όχι σφάλμα. Δεν εκδίδεται προειδοποίηση, ούτε καν υπόuse warnings. Ένας βρόχος της μορφήςwhile (defined(my $x = pop @arr)) { ... }τερματίζει είτε σε κενό είτε σε γνήσιο στοιχείοundef- χρησιμοποιήστε αντί γι” αυτόwhile (@arr)αν ο πίνακας μπορεί νόμιμα να περιέχειundef.Bareword έκφραση στη θέση του
ARRAY. Ηpopαπαιτεί πίνακα, όχι αυθαίρετη έκφραση. Ηpop @$arefλειτουργεί επειδή το@$arefείναι σύνταξη πίνακα· ηpop $arefείχε επιτραπεί για λίγο ως πείραμα μεταξύ της 5.14 και της 5.22 και είναι σφάλμα μεταγλώττισης από την 5.24. Γράφετε πάντα ρητά το sigil@στην αποαναφορά.Δεμένοι πίνακες. Η
pop @tiedκαλεί τη μέθοδοPOPτης δεμένης κλάσης αν είναι ορισμένη· αλλιώς ισχύει η προεπιλεγμένη υποχώρησηFETCHSIZE+FETCH+DELETE+STORESIZE. Οι παρενέργειες αυτών των μεθόδων πυροδοτούνται με αυτή τη σειρά.Η
popσυντομεύει τον πίνακα. Μετά τηνpop @arr, η$#arrμειώνεται κατά ένα και ηscalar @arrπέφτει κατά ένα. Αν χρειάζεται να επιθεωρήσετε την ουρά χωρίς να την αφαιρέσετε, διαβάστε απευθείας$arr[-1]ή$arr[$#arr]- δείτε την$#arrστο perlvar.Η μορφή χωρίς όρισμα αλλάζει σημασία ανάλογα με την εμβέλεια. Σε εμβέλεια αρχείου, η
pop;σημαίνειpop @ARGV. Μέσα σε υπορουτίνα σημαίνειpop @_. Η ίδια λοιπόν γραμμή πηγαίου κώδικα συμπεριφέρεται διαφορετικά ανάλογα με το πού εμφανίζεται - μια συνηθισμένη έκπληξη όταν κώδικας αναδιαρθρώνεται μέσα σε ή έξω από υπορουτίνα. Γράφετε ρητά τον στόχο (pop @ARGVήpop @_) όποτε η πρόθεση δεν είναι προφανής από το περιβάλλον.Η
popσε πίνακα με ψευδωνυμοποίηση μέσω@_. Τα ορίσματα υπορουτίνας είναι ψευδώνυμα προς τις τιμές του καλούντος. Ηpop @_αφαιρεί την εγγραφή ψευδωνύμου από το@_αλλά δεν συντομεύει τον πίνακα του καλούντος· για να συρρικνώσετε τον πίνακα του καλούντος, η υπορουτίνα πρέπει να δεχθεί τον πίνακα μέσω αναφοράς και να χρησιμοποιηθείpop @$arefαντί γι” αυτό.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
push- το αντίστοιχο· προσαρτά στο ίδιο άκρο του πίνακα από όπου αφαιρεί ηpopshift- αφαιρεί και επιστρέφει το πρώτο στοιχείο· ίδιοι κανόνες προεπιλογής με τηνpop(@_σε υπορουτίνα, αλλιώς@ARGV)unshift- προπενθέτει στην κεφαλή· ζευγαρωμένη με τηνshiftόπως ηpushείναι ζευγαρωμένη με τηνpopsplice- αφαιρεί ή αντικαθιστά αυθαίρετο τμήμα· ηsplice @arr, -1είναι η εκτενής μορφή τηςpop @arrlast- δεσμευμένη λέξη ελέγχου βρόχου, άσχετη με το τέλος πίνακα· αναφέρεται επειδή τα ονόματα συχνά συγχέονται$#arr- τελευταίος δείκτης του@arr· αλλάζει όταν ηpopσυντομεύει τον πίνακα