chomp#
מסיר את מפריד רשומת הקלט הגורר ממחרוזת במקום.
chomp מסיר כל תת־מחרוזת גוררת המתאימה לערך הנוכחי של $/ מהארגומנט שלו ומחזיר את המספר הכולל של תווים שהוסרו בכל ארגומנט שבו נגע. הוא מוטטו את הארגומנט שלו; ערך ההחזרה הוא מונה, לא המחרוזת המקוטמת. אם לא ניתן ארגומנט, הוא פועל על $_. chomp הוא המקבילה הבטוחה יותר של chop: הוא מסיר את המפריד רק אם הוא באמת שם, והוא מכבד את $/ ולכן עושה את הדבר הנכון על קבצים המסתיימים ללא שורה חדשה סופית או המשתמשים בסיומת רשומה שאינה שורה חדשה.
תקציר#
chomp VARIABLE
chomp( LIST )
chomp
מה מקבלים בחזרה#
המספר הכולל של תווים שהוסרו, כמספר שלם. לרוב 0 (לא היה מפריד) או 1 ("\n" יחיד הוסר תחת $/ ברירת המחדל). כאשר $/ הוא מחרוזת רב־תווית, chomp מוצלח מחזיר את אורכה. כאשר מבצעים chomp על רשימה, המונה מסוכם על פני כל אלמנט.
הערך המקוטם חי במשתנה שהעברתם; קוראים ל־chomp עבור תופעת הלוואי, לא עבור ערך ההחזרה שלו:
my $line = "hello\n";
my $n = chomp $line; # $line is "hello", $n is 1
מצב גלובלי שהוא נוגע בו#
$/- מפריד רשומת קלט.chompקורא את$/בכל קריאה ומסיר הופעה גוררת של הערך הנוכחי שלו. שינוי$/משנה את מה ש־chompמסיר; זה לרוב מה שרוצים כשמגדירים$/כדי לקרוא רשומות עם מתחם מותאם.$_- נצרך כארגומנט ברירת המחדל כש־chompנקרא ללא ארגומנט.chomp;בתוךwhile (<>) { ... }הוא הניב הקנוני.איטרטור האש - chomp על האש מאפס את האיטרטור
eachשלו (ראו מקרי קצה).
דוגמאות#
השימוש היומיומי - הסרת השורה החדשה הגוררת מהקלט:
while (my $line = <$fh>) {
chomp $line;
# process $line without the trailing "\n"
}
צורת ללא־הארגומנט פועלת על $_:
while (<>) {
chomp; # removes "\n" from $_
my @fields = split /:/;
}
chomp של הצבת lvalue - סוגריים נדרשים כדי שהארגומנט ל־chomp יהיה ההצבה כולה, לא רק המשתנה:
chomp(my $cwd = `pwd`); # strip "\n" from command output
chomp(my $answer = <STDIN>); # strip "\n" from user input
chomp של רשימה - כל אלמנט מקוטם והמונה הכולל מוחזר:
my @lines = ("a\n", "b\n", "no-nl");
my $n = chomp @lines; # @lines = ("a", "b", "no-nl"), $n = 2
מפריד רשומה מותאם - chomp עוקב אחרי כל מה ש־$/ מוגדר אליו:
local $/ = "\r\n";
my $line = "GET / HTTP/1.0\r\n";
chomp $line; # removes "\r\n", returns 2
מצב פסקה - $/ = "" גורם ל־chomp להסיר את כל השורות החדשות הגוררות מהמחרוזת:
local $/ = "";
my $para = "line one\nline two\n\n\n";
chomp $para; # $para is "line one\nline two"
מקרי קצה#
No separator present: a no-op. Returns
0and leaves the argument unchanged. This is the whole point ofchompoverchopsafe to call on strings that may or may not end in
$/.
ארגומנט
undef: chomp על סקלר לא־מוגדר משאיר אותו לא־מוגדר ומחזיר0. תחתuse warningsזה פולט אזהרתuninitialized.ארגומנט האש:
chomp %hמבצע chomp על כל ערך (לא על המפתחות) ומאפס את האיטרטורeachשל האש. לולאתwhile (my ($k, $v) = each %h)בתהליך על%hתיפגע.מצב slurp (
$/ = undef) ומצב רשומה באורך קבוע ($/מוגדר להפניה למספר שלם):chompלא מסיר דבר ומחזיר0. אין מושג של מפריד גורר במצבים אלה.מלכודת סוגריים בהצבה: ללא סוגריים,
chompנקשר חזק יותר מ־=:chomp $cwd = `pwd`; # parsed as (chomp $cwd) = `pwd`; chomp( $cwd = `pwd` ); # what you meant
אותה מלכודת עם רשימת פסיקים חשופה:
chomp $x, $y; # parsed as chomp($x), $y; chomp( $x, $y ); # chomps both
כל lvalue עובד, לא רק סקלרים פשוטים. אלמנטי מערך ואלמנטי האש, פרוסות, dereference-ים, וביטויי הצבה - כולם יעדים חוקיים.
קבועים וערכים לקריאה־בלבד: chomp על מחרוזת לקריאה־בלבד גורם croak עם
Modification of a read-only value attempted. ליטרלי מחרוזת הם לקריאה־בלבד.$/רב־בייט:chompמשווה בייטים של המחרוזת מול בייטים של$/. אם המחרוזת ו־$/חולקים על קידוד (לאחד דגל UTF-8 מוגדר, לשני לא), ההתאמה נעשית על ייצוג הבייטים הפנימי ועלולה להפתיע. יש לשמור את שני הצדדים באותו קידוד.
הבדלים מ־upstream#
תואם מלא ל־upstream Perl 5.42.
ראו גם#
chop- הסרת התו האחרון ללא תנאי והחזרתו; כלי ישן וגס יותר שהוחלף על־ידיchompלניקוי קלטsplit- לעיתים קרובות הצעד הבא לאחרchomp, מפצל את הרשומה הקצוצה עתה לשדותreadline/<>- קורא רשומות המסתיימות ב־$/;chompמבטל את הסיומת ש־readlineהותיר במקוםeach- איטרטור ההאש ש־chomp %hashמאפס$/- מפריד רשומת קלט;chompקורא אותו בכל קריאה$_- ארגומנט ברירת המחדל כש־chompנקרא ללא יעד מפורש