אופרטורי מחרוזות#

שני אופרטורים במשפחה זו - שרשור וחזרה. הם ממלאים עבור מחרוזות את אותו תפקיד ש־+ ו־* ממלאים עבור מספרים.

אופרטור

פעולה

אריות

אסוציאטיביות

הקשר

.

שרשור

בינארי

שמאל

מחרוזת

x

חזרה

בינארי

שמאל

מעורב

שניהם כופים את האופרנדים שלהם להקשר מחרוזת (עם ההמרה הרגילה ממספר־למחרוזת: 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)

אין אופרטור ש״מנחש״ - האופרטור בוחר את ההקשר, סוף פסוק.

ראו גם#