chop#
Αφαιρεί τον τελευταίο χαρακτήρα μιας συμβολοσειράς και τον επιστρέφει.
Η chop συντομεύει επιτόπου το όρισμά της κατά ακριβώς έναν χαρακτήρα και επιστρέφει τον χαρακτήρα που αφαιρέθηκε. Δεν σαρώνει τη συμβολοσειρά και δεν την αντιγράφει - απλώς μετακινεί το τέλος. Αν παραλειφθεί η VARIABLE, η chop λειτουργεί στο $_. Αν η VARIABLE είναι hash, η chop κάνει chop κάθε τιμή του hash (όχι τα κλειδιά) και επαναφέρει τον επαναλήπτη each του hash ως παρενέργεια. Κάθε lvalue είναι έγκυρος στόχος, συμπεριλαμβανομένης μιας έκφρασης ανάθεσης.
Σύνοψη#
chop VARIABLE
chop( LIST )
chop
Τι επιστρέφεται#
Ο χαρακτήρας που αφαιρέθηκε, ως συμβολοσειρά. Αν ο στόχος ήταν κενός ή απροσδιόριστος, επιστρέφεται η κενή συμβολοσειρά και ο στόχος μένει αμετάβλητος. Όταν η chop εφαρμόζεται σε λίστα, κάθε στοιχείο υφίσταται chop, αλλά επιστρέφεται μόνο ο χαρακτήρας που αφαιρέθηκε από το τελευταίο στοιχείο.
my $last = chop $line; # one character, or "" if $line was empty
Καθολική κατάσταση που επηρεάζει#
Διαβάζει το $_ όταν καλείται χωρίς όρισμα. Καμία άλλη ειδική μεταβλητή δεν συμβουλεύεται - ειδικότερα, η chop δεν επηρεάζεται από το $/ (τον διαχωριστή εγγραφών εισόδου), που είναι έγνοια της chomp.
Παραδείγματα#
Chop ενός βαθμωτού:
my $s = "hello";
my $c = chop $s; # $s is now "hell", $c is "o"
Chop στο $_ όταν δεν δίνεται όρισμα - ιδιωματικό μέσα σε βρόχο ανάγνωσης που θέλει τον τερματιστή να φύγει ανεξάρτητα από το τι είναι:
while (<$fh>) {
chop; # drops whatever character ends the line
push @rows, $_;
}
Chop μιας λίστας. Κάθε στοιχείο χάνει τον τελευταίο του χαρακτήρα· η τιμή επιστροφής είναι ο χαρακτήρας που αφαιρέθηκε μόνο από το τελευταίο στοιχείο:
my @lines = ("foo\n", "bar\n", "baz!");
my $last = chop @lines; # @lines is ("foo","bar","baz"), $last is "!"
Chop ενός hash. Οι τιμές υφίστανται chop, τα κλειδιά όχι, και ο επαναλήπτης each επαναφέρεται:
my %h = (a => "one\n", b => "two\n");
chop %h; # %h is (a => "one", b => "two")
Chop ανάθεσης - η chop δουλεύει με κάθε lvalue, και η ανάθεση επιστρέφει lvalue:
chop(my $cwd = `pwd`); # strip the trailing newline from pwd's output
Διατήρηση όλων εκτός από τον τελευταίο χαρακτήρα χωρίς τροποποίηση του πρωτοτύπου - δεν είναι δουλειά για την chop, που μεταλλάσσει. Χρησιμοποιήστε αντί αυτής την substr με αρνητικό μήκος:
my $head = substr($s, 0, -1); # $s is unchanged
Οριακές περιπτώσεις#
Κενός ή απροσδιόριστος στόχος: επιστρέφει την κενή συμβολοσειρά
""και αφήνει τον στόχο ως έχει. Ηchopσεundefδεν εγείρει από μόνη της προειδοποίηση· απλώς παράγει"".Στόχος μόνο για ανάγνωση: εγείρει
Modification of a read-only value attempted. Αυτό περιλαμβάνει κυριολεκτικές τιμές συμβολοσειρών και τιμές σημειωμένες ως μόνο για ανάγνωση μέσω τηςInternals::SvREADONLY.Συμβολοσειρές UTF-8: η
chopαφαιρεί έναν χαρακτήρα, όχι ένα byte. Ένας χαρακτήρας πολλαπλών bytes στο τέλος της συμβολοσειράς αφαιρείται ολόκληρος και επιστρέφεται ως συμβολοσειρά UTF-8. Η σημαία UTF-8 του στόχου διατηρείται σε ό,τι απομένει.Τιμή επιστροφής λίστας: επιστρέφεται μόνο ο χαρακτήρας που αφαιρέθηκε από το τελευταίο στοιχείο· οι υπόλοιποι απορρίπτονται. Αν χρειάζεστε κάθε αφαιρούμενο χαρακτήρα, κάντε chop στα στοιχεία μεμονωμένα σε έναν βρόχο.
Ένας χαρακτήρας έναντι τερματισμού γραμμής: η
chopαφαιρεί άνευ όρων έναν χαρακτήρα, ό,τι κι αν είναι αυτός - συμπεριλαμβανομένων κενών, ψηφίων ή γραμμάτων. Για να αφαιρέσετε υπό συνθήκη έναν τερματιστή γραμμής (αυτό που λέει το$/ότι μοιάζει), χρησιμοποιήστε τηνchomp.Παρενθεσιοποίηση του αναλυτή: η
chop($x = $y)κάνει chop στο αποτέλεσμα της ανάθεσης, που είναι το$x. Ηchop $x, $yαναλύεται ωςchop($x), $y- το κόμμα δεν επεκτείνει τη λίστα ορισμάτων τηςchopχωρίς παρενθέσεις. Γράψτεchop($x, $y)όταν εννοείτε τη μορφή λίστας.Επαναφορά επανάληψης του hash: επειδή η
chop %hδιασχίζει τις τιμές μέσω του επαναλήπτη του hash, οποιοσδήποτε εν εξελίξει βρόχοςeachπάνω από το%hακυρώνεται.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
chomp- υπό συνθήκη ξαδέρφη: αφαιρεί τελικό$/, όχι έναν τελευταίο χαρακτήρα χωρίς όρους· επιστρέφει τον αριθμό των χαρακτήρων που αφαιρέθηκαν αντί για τον ίδιο τον χαρακτήραsubstr- μη καταστροφική εναλλακτική· ηsubstr($s, 0, -1)επιστρέφει όλα εκτός από τον τελευταίο χαρακτήρα χωρίς να μεταλλάσσει το$ss///- η$s =~ s/.\z//sείναι το αντίστοιχο σε regex και αυτή από την οποία ηchopείναι ρητά ταχύτερη, επειδή ηchopούτε σαρώνει ούτε αντιγράφειlc,uc- άλλοι (κατά προσέγγιση) επιτόπιοι μετασχηματισμοί συμβολοσειρών που δέχονται κάθε lvalue$_- ο σιωπηρός στόχος όταν ηchopκαλείται χωρίς όρισμα$/- δεν συμβουλεύεται από τηνchop· τεκμηριώνεται εδώ μόνο για να επισημανθεί η αντίθεση με τηνchomp