אופרטורי מחרוזות#
שני אופרטורים במשפחה זו - שרשור וחזרה. הם ממלאים עבור מחרוזות את אותו תפקיד ש־+ ו־* ממלאים עבור מספרים.
אופרטור | פעולה | אריות | אסוציאטיביות | הקשר |
|---|---|---|---|---|
| שרשור | בינארי | שמאל | מחרוזת |
| חזרה | בינארי | שמאל | מעורב |
שניהם כופים את האופרנדים שלהם להקשר מחרוזת (עם ההמרה הרגילה ממספר־למחרוזת: 42 הופך ל־"42", 1.5 הופך ל־"1.5", וכו«).
. - שרשור#
מחבר את שני האופרנדים. התוצאה היא שרשור המחרוזות השמאלית והימנית:
"Hello" . " " . "World" # "Hello World"
"x = " . 42 # "x = 42" (numeric coercion)
"err: " . $! # "err: <strerror>"
.= המורכב מצרף במקום:
my $s = "a";
$s .= "b"; # "ab"
$s .= "c"; # "abc"
.= מהיר יותר מ־$s = $s . "..." לצירוף חוזר - לא במרווח אסימפטוטי ב־Perl מודרני, אך מספיק כדי לשנות בלולאות צפופות על מחרוזות ארוכות. זמן הריצה של pperl משנה את המאגר הפנימי במקום כשמונה ההפניות של המחרוזת הוא 1 (ראו הערות ספציפיות ל־PetaPerl להלן).
עבור מספרים גדולים של חלקים, join בדרך כלל ברור יותר משרשרת של .:
join(", ", @items)
"hello, world, !" # hand-built; readable for small arity
join(", ", $a, $b, $c, $d) # cleaner than $a.", ".$b.", ".$c.", ".$d
x - חזרה#
חוזר על האופרנד השמאלי שלו מספר פעמים הנתון על־ידי האופרנד הימני. ההתנהגות תלויה בהקשר של האופרנד השמאלי:
הקשר סקלר בצד שמאל ← חזרת מחרוזת.
הקשר רשימה בצד שמאל (סוגריים סביב האופרנד השמאלי) ← חזרת רשימה.
"ab" x 3 # "ababab" (string)
"-" x 40 # 40-character ruler
(0) x 5 # (0, 0, 0, 0, 0) (list)
(1, 2) x 3 # (1, 2, 1, 2, 1, 2)
ההבחנה של הסוגריים־בצד־שמאל מכשילה מתחילים. ללא סוגריים, הצד השמאלי נמצא בהקשר סקלר ללא תלות בכיצד הוא נראה:
1, 2 x 3 # (1, "222") -- Whoops.
# x binds tighter than , so this is
# (1, (2 x 3)) - and 2 in scalar context
# stringifies, so 2 x 3 is "222".
(1, 2) x 3 # (1, 2, 1, 2, 1, 2) -- list repetition
x= המורכב משכפל במקום:
my $line = "=";
$line x= 40; # "========================================"
מונה שאינו חיובי מחזיר את המחרוזת הריקה (או רשימה ריקה בהקשר רשימה), ללא אזהרה:
"abc" x 0 # ""
"abc" x -3 # ""
("a", "b") x 0 # ()
מונה שאינו שלם נחתך כלפי אפס:
"x" x 3.7 # "xxx" (3.7 truncates to 3)
"x" x -0.5 # ""
אופרטורים מספריים לעומת מחרוזתיים#
ערבוב אופרטורים מספריים ומחרוזתיים על אותו אופרנד מייצר תוצאות צפויות אך לעתים מפתיעות, מפני שכל אופרטור כופה את ההקשר שלו:
"5" + "3" # 8 (+ wants numeric → both coerce to numbers)
5 . 3 # "53" (. wants string → both coerce to strings)
"5" * "3" # 15
5 x 3 # "555" (x wants string left, number right)
אין אופרטור ש״מנחש״ - האופרטור בוחר את ההקשר, סוף פסוק.
ראו גם#
אופרטורים אריתמטיים -
+ו־*הם המקבילות המספריות של.ו־x.השוואת מחרוזות - השוואת מחרוזות במקום בנייתן.
join,sprintf,substr- צורות perlfunc של פעולות בניית־מחרוזת נפוצות.