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.