chr#
מחזיר את התו שנקודת הקוד שלו היא המספר הנתון.
chr לוקח מספר שלם אי־שלילי ומחזיר מחרוזת בת תו אחד המחזיקה את התו שבנקודת הקוד הזו בערכת התווים הנוכחית. chr(65) הוא "A" הן ב־ASCII והן ב־Unicode; chr(0x263a) הוא תו החיוך של Unicode ☺. אם NUMBER מושמט, chr פועל על $_. הפעולה ההפוכה היא ord.
תקציר#
chr NUMBER
chr
chr($n)
מה מקבלים בחזרה#
מחרוזת באורך תו אחד. עם סמנטיקת Unicode - ברירת המחדל לכל נקודת קוד מעל 0x7f - אותו תו עשוי להיות מקודד פנימית כמספר בתים של UTF-8, כך ש־length מדווח 1 בעוד bytes::length יכול לדווח עד ארבעה. עבור נקודות קוד בטווח 0..127 התוצאה היא מחרוזת ASCII בת בית בודד והשניים מסכימים.
מצב גלובלי שהוא נוגע בו#
ללא ארגומנט, chr קורא את $_. הוא אינו כותב דבר. הפרגמה bytes משנה את מה ש־chr עושה עם קלט מחוץ לטווח או שלילי (ראו מקרי קצה); אף פרגמה או משתנה מיוחד אחר אינו משפיע עליו.
דוגמאות#
תו ASCII מנקודת הקוד שלו:
print chr(65); # A
print chr(97), "\n"; # a
בניית מחרוזת מרשימה של נקודות קוד באמצעות map ו־join:
my @code = (72, 101, 108, 108, 111);
print join("", map { chr } @code), "\n"; # Hello
נקודת קוד של Unicode מעל טווח ה־ASCII - התוצאה היא תו אחד, ארבעה בתים בצורת ה־UTF-8 הפנימית שלה:
use utf8;
my $smiley = chr(0x263a);
print length($smiley); # 1
use bytes; print length($smiley); # 3
נסיעה חזור עם ord - עבור כל תו בודד $c, הזהות chr(ord($c)) eq $c מתקיימת:
my $c = "Z";
print chr(ord($c)) eq $c ? "yes" : "no"; # yes
צורת ברירת־מחדל־ארגומנט בתוך לולאה על $_:
for (65, 66, 67) {
print chr; # prints ABC
}
קלט שלילי מניב את תו ההחלפה של Unicode U+FFFD:
print chr(-1) eq "\x{fffd}" ? "repl" : "?"; # repl
מקרי קצה#
ארגומנט שברי: נקטם לכיוון אפס לפני החיפוש.
chr(65.9)מחזיר"A".מחרוזת לא־מספרית: מומרת על ידי כללי הכפיית־מספרית הרגילים, עם אזהרה תחת
use warnings.chr("65abc")מחזיר"A".chr(undef)מחזירchr(0), את תו ה־NUL"\0", ומזהיר תחתuse warningsעל שימוש בערך לא מאותחל.ערכים שליליים: מחוץ לפרגמה
bytes, קלט שלילי מחזיר את תו ההחלפה של Unicode"\x{fffd}". תחתuse bytes, נעשה שימוש בשמונת הביטים התחתונים של ערך השלם:chr(-1)מניב את הבית"\xff".ערכים מעל
0x10ffff(נקודת הקוד המקסימלית של Unicode) עדיין מחזירים מחרוזת בת תו בודד תחת סמנטיקת ברירת המחדל, אך פולטים אזהרהUnicode non-character is illegal for interchangeעבור טווחי הלא־תווים, ואזהרהUnicode surrogate U+...עבור טווח ה־surrogate0xd800..0xdfffכשהמחרוזת מקודדת מאוחר יותר.הטווח 128..255: תווים בטווח זה אינם מאוחסנים כברירת מחדל כ־UTF-8 פנימית, לתאימות לאחור עם מחרוזות בתים. הם משווים שווה לצורת הבית הבודד שלהם ולאותה נקודת קוד של Unicode; הייצוג הפנימי משנה רק בעת בדיקה עם
bytes::lengthאו באינטראקציה עם שכבות PerlIO.chrלעולם אינו זורק שגיאה על כל קלט מספרי. שגיאות צצות רק כאזהרות, לעולם לא כחריגות.אינו lvalue:
chrמחזיר סקלר רענן.chr(65) = "B"הוא שגיאת תחביר.
הבדלים מהמקור#
תאימות מלאה עם Perl 5.42 המקורי.
ראו גם#
ord- הפעולה ההפוכה שלchr: נקודת הקוד של התו הראשון של מחרוזתsprintf-sprintf "%c", $nשקול ל־chr $n; השתמשו בו לשלב תו לתוך פורמט גדול יותר בבת אחתpack- בניית מחרוזת רבת־תווים מרשימה של נקודות קוד בקריאה אחת (pack "U*", @codeעבור Unicode,pack "C*", @codeעבור בתים)hex- פירסור מחרוזת hex לתוך השלם שאז מועבר ל־chr; משלים אתchrבעת פענוח סימוןU+XXXXuse bytes- פרגמה שמחליפה אתchrלסמנטיקה מוכוונת־בתים עבור ערכים מחוץ ל־0..0x7fperlunicode- רקע על האופן שבו Perl מאחסן ומשווה מחרוזות Unicode