רשימות

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"

חיבור שורות עם שורה חדשה בין כל אחת - שים לב שהשורה האחרונה אינה מקבלת שורה חדשה, מכיוון ש־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".

  • המפריד מומר למחרוזת: העבר מספר, הפניה, עצם עם overload של "" - 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