בחלק זה של המדריך לפרל נלמד על חלק מהפונקציות של פרל לטיפול במחרוזות.

lc, uc, length

קיימות מספר פונקציות פשוטות כמו lc ו- uc שמחזירות את המחרוזות באותיות גדולות או קטנות. קיימת הפונקצייה length שמחזירה את מספר התווים במחרוזת נתונה.

למשל בדוגמה הבאה:

use strict;
use warnings;
use 5.010;

my $str = 'HeLlo';

say lc $str;      # hello
say uc $str;      # HELLO
say length $str;  # 5

index

פונקצייה נוספת היא הפונקצייה index . פונקצייה זו מקבלת שתי מחרוזות ומחזירה את מיקומה של המחרוזת השנייה במחרזות הראשונה.

use strict;
use warnings;
use 5.010;

my $str = "The black cat jumped from the green tree";

say index $str, 'cat';             # 10
say index $str, 'dog';             # -1
say index $str, "The";             # 0
say index $str, "the";             # 26

הקריאה הראשונה ל- index החזירה 10 כיוון שהמחרוזת "cat" מתחילה בתו העשירי. הקריאה השנייה החזירה index -1 לציון העובדה ש- "dog" לא מופיעה במשפט.

הקריאה השלישית מראה לנו ש- index מחזירה 0 כשהמחרוזת השנייה מופיעה בתחילת המחרוזת הראשונה.

הדוגמה הרביעית מראה ש- index מחפשת התאמה מדוייקת ואי לכך יש הבחנה בין אותיות גדולות וקטנות. לכן "the" אינה זהה ל- "The" .

index() מחפשת מחרוזות ולא רק מילים, לכן ניתן לחפש אפילו את המחרוזת "e ":

say index $str, "e ";              # 2

ניתן להעביר ל-index() גם פרמטר שלישי שמציין את המיקום שבו יש להתחיל לחפש. אז כשמצאנו "e " בתו השני של המחרוזת הראשונה, אנו יכולים להתחיל לחפש עכשיו מהתו השלישי כדי לראות אם יש עוד מופע של "e ":

say index $str, "e ";              # 2
say index $str, "e ", 3;           # 28
say index $str, "e", 3;            # 18

חיפוש "e" ללא רווח ייתן לנו תוצאה שונה.

ובנוסף לכך קיימת פונקציה הנקראה rindex (אינדקס ימני) שמתחילה לחפש מהצד הימני של המחרוזת:

say rindex $str, "e";              # 39
say rindex $str, "e", 38;          # 38
say rindex $str, "e", 37;          # 33

substr

נראה לי שהפונקציה המעניינת ביותר במאמר זה היא substr. היא בעצם ההיפך מ- index(). בעוד ש- index() אומרת לכם היכן נמצאת מחרוזת נתונה, substr נותנת לכם את תת המחרוזת במישומים נתונים. בדרך כלל substr מקבלת 3 פרמטרים. הראשון הוא המחרזות. השני הוא המיקום ההתחלתי, שנקרא גם offset (מקום), והשלישי הוא האורך של תת המחרוזת שאנחנו רוצים לקבל.

use strict;
use warnings;
use 5.010;

my $str = "The black cat climbed the green tree";

say substr $str, 4, 5;                      # black

הפונקציה substr עובדת על בסיס 0 ולכן התו במקום הרביעי הוא האות b.

say substr $str, 4, -11;                    # black cat climbed the

הפרמטר השלישי(האורך) יכול להיות גם מספר שלילי. במקרה זה הוא אומר לנו את מספר התווים מהציד הימני של המחרוזת המקורית שלא צריכות להיות חלק מתת המחרוזת. מה שכתוב למעלה אומר: ספור 4 משמאל, 11 מימין, החזר מה שביניהם.

say substr $str, 14;                        # climbed the green tree

אפשר להשמיט את הפרמטר השלישי (אורך) והמשמעות של זה היא להחזיר את כל התווים מהמקום הרביעי עד סוף המחרוזת.

say substr $str, -4;                        # tree
say substr $str, -4, 2;                     # tr

אנחנו יכולים במספרים שליליים גם ב-offset( מקום), והמשמעות של זה היא: ספור 4 מצד ימין והתחל משם. זה אותו דבר כמו לכתוב length($str)-4 ב-offset.

החלפת חלק ממחרוזת

הדוגמה האחרונה היא קצת מוזרה. עד כה בכל המקרים substr החזיר תת-מחרוזת ולא שינה את המחרוזת המקורית. בדוגמה זאת הערך המוחזר על ידי substr ייתנהג אותו דבר, אבל substr גם תשנה את תוכנה של המחרוזת המקורית!

הערך המוחזר על ידי substr() תמיד נקבע על ידי שלושת הפרמטרים הראשונים, אבל במקרה זה substr מקבל גם פרמטר רביעי. זוהי מחרוזת שתחליף את תת-המחרוזת במחרוזת המקורית.

my $z = substr $str, 14, 7, "jumped from";
say $z;                                                     # climbed
say $str;                  # The black cat jumped from the green tree

אז מה שקורה זה כך: substr $str, 14, 7, "jumped from" מחזירה את המילה climbed, אבל בגלל הפרמטר הרביעי, המחרוזת המקורית שונתה.