ucfirst#
מחזיר עותק של מחרוזת כשהתו הראשון שלה במצב titlecase.
ucfirst לוקח מחרוזת, ממיר את התו הראשון שלה לצורת הtitlecase של Unicode, ומחזיר את התוצאה. כל תו אחר נשאר ללא־שינוי. המקור לעולם אינו משתנה. אם הארגומנט הושמט, ucfirst פועל על $_. Titlecase בדרך כלל מתלכד עם uppercase - "a" הופך ל־"A" - אך נבדל עבור מספר קטן של digraphs במערכות כתב המבחינות בין השניים (ראו מקרי קצה). אותם כללי פראגמה, locale, ודגל UTF-8 השולטים ב־lc וב־uc שולטים ב־ucfirst.
תקציר#
ucfirst EXPR
ucfirst
מה מקבלים בחזרה#
מחרוזת חדשה באותו אורך תווים כמו הקלט - רק התו הראשון משתנה. ערך ההחזרה הוא תמיד סקלר חדש; שינויו אינו משפיע על הארגומנט, ושינוי הארגומנט לאחר מכן אינו משפיע על המחרוזת המוחזרת. אורך הבייטים עשוי להשתנות בכמה בייטים אם לצורת ה־titlecase של התו הראשון יש קידוד UTF-8 שונה מהצורה המקורית שלו.
my $str = ucfirst("hello world!"); # "Hello world!"
מצב גלובלי שהוא נוגע בו#
קורא את
$_כאשר נקרא ללא ארגומנט.צופה ב־
use localeעבורLC_CTYPE- כש־locale בתוקף, טבלת ה־uppercasing של ה־locale הנוכחי חלה על תו ראשון שנקודת הקוד שלו מתחת ל־256.צופה ב־
use bytes- תחתuse bytesרקa-zמובילים משתנים, ל־A-Z.צופה ב־
use feature 'unicode_strings'- אילוץ כללי Unicode ללא תלות בדגל ה־UTF-8 על הקלט.
אילו כללי casing חלים#
ucfirst בוחר אחד מחמשת מערכי הכללים עבור התו הראשון, לפי סדר עדיפות. הראשון שתנאיו מתקיים מנצח. תווים שלאחר מכן תמיד עוברים ללא־שינוי, ללא תלות באיזה מערך כללים חל על הראשון.
use bytesבתוקף - כללי ASCII.a-zמובילים ממופים ל־A-Z; כל בייט מוביל אחר נשאר כפי שהוא, כולל בייטים בטווח 128-255 שאחרת היו אותיות Latin-1.use localeעבורLC_CTYPEבתוקף - טבלאות ה־locale הנוכחי חלות על תו ראשון מתחת לנקודת קוד 256; תו ראשון ב־256 ומעלה (נגיש רק כשהמחרוזת כבר נושאת את דגל ה־UTF-8) משתמש בכללי Unicode. מ־Perl 5.20 ואילך, locale של UTF-8 משתמש בכללי Unicode מלאים לאורך כולו.לארגומנט יש דגל UTF-8 מוגדר - כללי titlecase של Unicode חלים על התו הראשון.
use feature 'unicode_strings'אוuse locale ':not_characters'בתוקף - כללי titlecase של Unicode חלים על התו הראשון, ללא תלות בדגל ה־UTF-8.אחרת - כללי ASCII. תו מוביל מחוץ ל־
a-zמוחזר ללא־שינוי, כולל אותיות lowercase של Latin-1 כמוà-þ.
התוצאה: אם אתם רוצים התנהגות Unicode צפויה בכל מחרוזת ללא תלות באופן בנייתה, הפעילו use feature 'unicode_strings' (או use v5.12 ומעלה, שמפעיל זאת עבורכם).
Titlecase מול uppercase#
עבור הרוב המוחלט של התווים, titlecase ו־uppercase הם אותה נקודת קוד - ucfirst("abc") ו־uc(substr("abc", 0, 1)) . substr("abc", 1) מפיקים תוצאות זהות. הם נבדלים רק עבור קומץ תווי Unicode שצורת ה־uppercase שלהם היא רצף של שתי אותיות גדולות אך צורת ה־titlecase שלהם היא אות גדולה־ואחריה־אות קטנה בודדת. הדוגמה הסטנדרטית היא ה־digraph הלטיני dz (U+01F3):
uppercase הוא
DZ(U+01F1) -"DZ"מוצג כגליף גדול אחד.titlecase הוא
Dz(U+01F2) -"Dz",Dגדולה ואחריהzקטנה.
ucfirst מחזיר titlecase, וזוהי הצורה הנכונה כאשר התו עומד בתחילת מילה בקפיטליזציה. uc על אותו תו ראשון היה מחזיר את צורת שתי־האותיות־הגדולות, שנקראת כאילו המילה כולה ב־caps.
דוגמאות#
uppercasing בסיסי של תו ראשון ב־ASCII:
my $s = ucfirst("hello, world!"); # "Hello, world!"
ברירת מחדל ל־$_:
for ("foo", "bar", "baz") {
print ucfirst, "\n"; # Foo / Bar / Baz
}
תווי Unicode עוברים titlecase רק כשהכללים מאפשרים זאת:
use feature 'unicode_strings';
my $s = ucfirst("äpfel"); # "Äpfel"
ללא unicode_strings וללא דגל ה־UTF-8 על הקלט, תו ראשון לא־ASCII עובר ללא־שינוי:
my $bytes = "\xE4pfel"; # ä as a single Latin-1 byte
my $cap = ucfirst $bytes; # unchanged: "\xE4pfel"
ucfirst הוא מה שתומך ב־escape \u בתוך מחרוזות במירכאות כפולות:
my $str = "\uperl\E is great"; # "Perl is great"
קפיטליזציה לכל מילה - שלבו עם split, map, ו־join:
my $title = join " ", map { ucfirst lc $_ } split / /, "HELLO world";
# "Hello World"
Titlecase של digraph המבחין בין titlecase ל־uppercase:
use feature 'unicode_strings';
my $t = ucfirst("\x{01F3}xyz"); # "\x{01F2}xyz" - Dz, not DZ
מקרי קצה#
ארגומנט
undefמעלה אזהרתuninitializedתחתuse warningsומחזיר את המחרוזת הריקה.מחרוזת ריקה מחזירה את המחרוזת הריקה - אין תו ראשון לשינוי.
מחרוזת חד־תווית מתנהגת בדיוק כפי ש־
ucהיה מתנהג עבור אותו תו אחד תחת אותו מערך כללים, למעט במקרי ה־digraph המתוארים לעיל שבהם titlecase ו־uppercase נבדלים.מספרים מומרים למחרוזת תחילה:
ucfirst(42)מחזיר"42"- ה־"4"המוביל אינו תו עם case, אז דבר אינו משתנה.רווחים או פיסוק מובילים אינם מדולגים.
ucfirst(" hello")מחזיר" hello"- התו הראשון הוא הרווח, שאין לו צורת titlecase. אם צריך להוסיף קפיטליזציה לאות הראשונה, הסירו לא־אותיות מובילות תחילה או השתמשו ב־regex (s/\b(\w)/\u$1/).LATIN SMALL LETTER SHARP S(U+00DF,ß) עובר titlecase ל־"Ss"תחת כללי Unicode מלאים - שינוי אורך הסותר את הערובה הרגילה של ״אותו אורך תווים״. תחתuse localeב־locale שאינו UTF-8, Perl משאיר את התו ללא־שינוי במקום לנחש, ומ־Perl 5.22 ואילך הדבר מעלה אזהרת locale.Locale ודגל ה־UTF-8 מקיימים אינטראקציה: תחת
use localeב־locale שאינו UTF-8, תו ראשון מתחת ל־256 עוקב אחר ה־locale בעוד תו ראשון ב־256 ומעלה עוקב אחר Unicode. בפועלucfirstנוגע אי־פעם רק בתו אחד, אז האינטראקציה עדינה יותר מאשר עבורlc/uc, אבל היא עדיין נצפית במחרוזות המתחילות בתווים של supplementary-plane.משתנים שעברו tie מקבלים את ה־
FETCHשלהם נקרא פעם אחת.ucfirstאינו משנה את הערך שעבר tie; הוא מחזיר סקלר פשוט (שלא עבר tie).ucfirstהוא אופרטור אונרי בעל שם, לא אופרטור רשימה.ucfirst $a, $bמפוענח כ־(ucfirst $a), $b- רק$aעובר טרנספורמציה, ואופרטור הפסיק משליך את התוצאה. השתמשו בסוגריים או ב־mapכשמתכוונים לעשות titlecase למספר מחרוזות:my @capped = map { ucfirst } @words;
הבדלים מהמקור#
תאימות מלאה עם Perl 5.42 המקורי.
ראו גם#
lcfirst- המקבילה ל־lowercasing; הופכת את התו הראשון לצורת ה־lowercase שלוuc- uppercase לכל תו במחרוזת; השתמשו כשרוצים שהמחרוזת כולה תהיה בקפיטליזציה, לא רק האות הראשונהfc- Unicode casefold, הבחירה הנכונה להשוואה ללא רגישות לאותיות גדולות וקטנות כשהקלט עשוי להכיל לא־ASCII$_- נושא ברירת המחדל ש־ucfirstקורא בקריאה ללא ארגומנטuse locale- שולט האם טבלאות locale או כללי ASCII/Unicode חלים על התו הראשון כשהוא מתחת לנקודת קוד 256use feature 'unicode_strings'- אילוץ titlecasing מלא של Unicode ללא תלות בדגל ה־UTF-8 על הקלט