join#
Συνενώνει μια λίστα συμβολοσειρών με έναν διαχωριστή μεταξύ κάθε γειτονικού ζεύγους και επιστρέφει τη μία προκύπτουσα συμβολοσειρά.
Η join παίρνει έναν διαχωριστή ως πρώτο όρισμα και οποιοδήποτε πλήθος τιμών ως τα υπόλοιπα. Μετατρέπει σε συμβολοσειρά κάθε τιμή στη LIST, τις κολλά μαζί με την EXPR τοποθετημένη μεταξύ κάθε ζεύγους, και επιστρέφει ένα βαθμωτό. Ο διαχωριστής εισάγεται μεταξύ στοιχείων μόνο - ποτέ στην αρχή, ποτέ στο τέλος. Με μηδέν ή ένα στοιχείο ο διαχωριστής δεν εμφανίζεται καθόλου.
Σύνοψη#
join $sep, @list
join "", @chars
join "\n", @lines
Τι επιστρέφεται#
Μία συμβολοσειρά. Το αποτέλεσμα είναι ένα φρέσκο βαθμωτό· η τροποποίησή του δεν φτάνει πίσω στη LIST. Σε βαθμωτό περιβάλλον παίρνετε αυτή τη συμβολοσειρά· η join είναι ουσιαστικά πάντα βαθμωτή επειδή παράγει πάντα μόνο μία τιμή.
Παραδείγματα#
Τιμές διαχωρισμένες με κόμμα, η κανονική χρήση:
my @cols = ("alice", 42, "ops");
my $row = join ",", @cols; # "alice,42,ops"
Κατασκευή διαδρομής αρχείου με / ως διαχωριστή:
my @parts = ("var", "log", "app.log");
my $path = "/" . join("/", @parts); # "/var/log/app.log"
Ένωση γραμμών με newline μεταξύ κάθε μιας - προσέξτε ότι η τελευταία γραμμή δεν παίρνει newline, επειδή η join βάζει τον διαχωριστή μεταξύ στοιχείων:
my @lines = ("first", "second", "third");
my $text = join "\n", @lines; # "first\nsecond\nthird"
Συνένωση χωρίς διαχωριστή. Χρησιμοποιήστε την κενή συμβολοσειρά "", όχι undef - η undef προκαλεί προειδοποίηση uninitialized υπό use warnings και ούτως ή άλλως μετατρέπεται σε συμβολοσειρά ως "":
my @chars = ("h", "e", "l", "l", "o");
my $word = join "", @chars; # "hello"
Μια κενή LIST παράγει κενή συμβολοσειρά - είναι ασφαλές να βασιστείτε σε αυτό και δεν χρειάζεται φύλακας:
my @empty;
my $s = join ",", @empty; # ""
Οριακές περιπτώσεις#
Κενή
LIST: επιστρέφει"". Ο διαχωριστής δεν χρησιμοποιείται ποτέ.LISTενός στοιχείου: επιστρέφει αυτό το στοιχείο μετατραμμένο σε συμβολοσειρά, χωρίς διαχωριστή πουθενά:join ",", ("only")είναι"only".Ο διαχωριστής μετατρέπεται σε συμβολοσειρά: περάστε αριθμό, αναφορά, αντικείμενο με υπερφορτωμένη
""- ηjoinκαλεί την ίδια μετατροπή σε συμβολοσειρά που θα καλούσε κάθε άλλος τελεστής της Perl. Τοjoin 0, 1, 2, 3είναι"10203".Διαχωριστής πολλαπλών χαρακτήρων: η
EXPRμπορεί να είναι οποιαδήποτε συμβολοσειρά, όχι μόνο ένας χαρακτήρας. Τοjoin ", ", @colsδίνει"a, b, c".Στοιχεία
undefστηLIST: κάθεundefμετατρέπεται σε συμβολοσειρά ως""και εκπέμπει προειδοποίησηuninitializedυπόuse warnings. Δύο γειτονικάundefεξακολουθούν να παίρνουν διαχωριστή μεταξύ τους: τοjoin ",", (undef, undef)είναι",".Η
joinδεν είναι η αντίστροφη τηςsplitσε έναν μόνο χαρακτήρα όταν ο διαχωριστής που περνάτε διαφέρει από το μοτίβο που χρησιμοποιείται για διαχωρισμό. Ηsplitπαίρνει μοτίβο· ηjoinπαίρνει κυριολεκτική συμβολοσειρά. Ο πλήρης κύκλοςjoin "\t", split /\s+/, $sχάνει τη διάκριση μεταξύ ακολουθιών λευκών χαρακτήρων και ενός μόνο tab.Όχι μοτίβο: σε αντίθεση με την
split, το πρώτο όρισμα τηςjoinδεν είναι regex. Τοjoin /,/, @xείναι συντακτική έκπληξη - ο διαχωριστής είναι πάντα συμβολοσειρά.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
split- η αντίστροφη: παίρνει συμβολοσειρά και μοτίβο, επιστρέφει λίστα τμημάτωνsprintf- όταν χρειάζεστε μορφοποίηση ανά στοιχείο, συμπλήρωση, ή πλάτη πεδίων που ηjoinδεν μπορεί να εκφράσειpack- όταν η έξοδος είναι δυαδική εγγραφή, όχι συμβολοσειρά κειμένου με διαχωριστέςmap- μετασχηματισμός στοιχείων πριν την ένωση, π.χ.join ",", map { uc } @names