סקלרים ומחרוזות

chop#

מסיר את התו האחרון ממחרוזת ומחזיר אותו.

chop מקצר את הארגומנט שלו במקום בדיוק בתו אחד ומחזיר את התו שהוסר. אינו סורק את המחרוזת ואינו מעתיק אותה - הוא פשוט מזיז את הסוף. אם VARIABLE מושמט, chop פועל על $_. אם VARIABLE הוא האש, chop קוטם כל ערך של ההאש (לא את המפתחות) ומאפס את איטרטור ה־each של ההאש כתופעת לוואי. כל lvalue הוא יעד תקף, כולל ביטוי השמה.

תקציר#

chop VARIABLE
chop( LIST )
chop

מה מקבלים בחזרה#

התו שהוסר, כמחרוזת. אם היעד היה ריק או לא־מוגדר, המחרוזת הריקה מוחזרת והיעד נשאר ללא שינוי. כאשר chop מוחל על רשימה, כל אלמנט נקטם אך מוחזר רק התו שהוסר מהאלמנט האחרון.

my $last = chop $line;     # one character, or "" if $line was empty

מצב גלובלי שהוא נוגע בו#

קורא את $_ כאשר הוא נקרא ללא ארגומנט. לא נבדקים משתנים מיוחדים אחרים - בפרט, chop אינו מושפע מ־$/ (מפריד רשומת הקלט), שזה עניינו של chomp.

דוגמאות#

קטימת סקלר:

my $s = "hello";
my $c = chop $s;            # $s is now "hell", $c is "o"

קטימת $_ כאשר לא ניתן ארגומנט - אידיומטי בתוך לולאת קריאה שרוצה להיפטר מהמסיים בלי קשר למה שהוא:

while (<$fh>) {
    chop;                   # drops whatever character ends the line
    push @rows, $_;
}

קטימת רשימה. כל אלמנט מאבד את התו האחרון שלו; ערך ההחזרה הוא התו שהוסר מהאלמנט האחרון בלבד:

my @lines = ("foo\n", "bar\n", "baz!");
my $last  = chop @lines;    # @lines is ("foo","bar","baz"), $last is "!"

קטימת האש. הערכים נקטמים, המפתחות לא, ואיטרטור ה־each מאופס:

my %h = (a => "one\n", b => "two\n");
chop %h;                    # %h is (a => "one", b => "two")

קטימת השמה - chop עובד על כל lvalue, והשמה מחזירה כזה:

chop(my $cwd = `pwd`);      # strip the trailing newline from pwd's output

שמירת הכל חוץ מהתו האחרון ללא שינוי המקור - אינה משימה ל־chop, שמשנה במקום. השתמש ב־substr עם אורך שלילי במקום:

my $head = substr($s, 0, -1);   # $s is unchanged

מקרי קצה#

  • יעד ריק או לא־מוגדר: מחזיר את המחרוזת הריקה "" ומשאיר את היעד כפי שהוא. chop על undef אינו מעלה אזהרה בעצמו; הוא פשוט מפיק "".

  • יעד לקריאה־בלבד: מעלה Modification of a read-only value attempted. הדבר כולל ליטרלי מחרוזת וערכים המסומנים לקריאה־בלבד דרך Internals::SvREADONLY.

  • מחרוזות UTF-8: chop מסיר תו אחד, לא בית אחד. תו רב־בתי בסוף המחרוזת מוסר בשלמותו ומוחזר כמחרוזת UTF-8. דגל ה־UTF-8 של היעד נשמר על מה שנותר.

  • ערך החזרה ברשימה: מוחזר רק התו שנקטם מהאלמנט האחרון; האחרים מושלכים. אם אתה צריך כל תו שהוסר, קטום את האלמנטים בנפרד בלולאה.

  • תו אחד מול סיום שורה: chop מסיר ללא תנאי תו אחד, יהיה אשר יהיה - כולל רווחים, ספרות או אותיות. להסרה מותנית של מסיים שורה (מה ש־$/ אומר שהוא נראה כמותו), השתמש ב־chomp.

  • סוגריים בפענוח: chop($x = $y) קוטם את תוצאת ההשמה, שהיא $x. chop $x, $y מפורש כ־chop($x), $y - הפסיק אינו מרחיב את רשימת הארגומנטים של chop ללא סוגריים. כתוב chop($x, $y) כאשר אתה מתכוון לצורת הרשימה.

  • איפוס איטרציה של האש: מאחר ש־chop %h עובר על הערכים דרך איטרטור ההאש, כל לולאת each בעיצומה על %h מתבטלת.

הבדלים מהמקור#

תאימות מלאה עם Perl 5.42 המקורי.

ראו גם#

  • chomp - בן־דוד המותנה: מסיר $/ גורר, לא תו אחרון ללא תנאי; מחזיר את מספר התווים שהוסרו במקום את התו עצמו

  • substr - חלופה לא־הרסנית; substr($s, 0, -1) מחזיר את הכל חוץ מהתו האחרון מבלי לשנות את $s

  • s/// - $s =~ s/.\z//s הוא המקבילה הרגקסית וזו ש־chop מהיר ממנה במפורש, כי chop לא סורק ולא מעתיק

  • lc, uc - טרנספורמציות מחרוזת אחרות (כמעט) במקום שמקבלות כל lvalue

  • $_ - היעד המשתמע כאשר chop נקרא ללא ארגומנט

  • $/ - אינו נבדק על־ידי chop; מתועד כאן רק כדי לסמן את הניגוד עם chomp