Λίστες

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