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

lc#

מחזיר עותק של מחרוזת באותיות קטנות.

lc מקבל מחרוזת, ממיר כל תו בעל גודל־אותיות לצורת האות הקטנה שלו, ומחזיר את התוצאה. המקור לעולם אינו משונה. אם הארגומנט מושמט, lc פועל על $_. הקבוצה המדויקת של תווים המשתנים תלויה בקידוד המחרוזת ובפרגמות שבתחום באתר הקריאה - ASCII בלבד כברירת מחדל, Unicode מלא תחת use feature 'unicode_strings' או כאשר הקלט הוא כבר מחרוזת תווים עם דגל UTF-8.

תקציר#

lc EXPR
lc

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

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

my $str = lc("Perl is GREAT");   # "perl is great"

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

  • קורא את $_ כאשר נקרא ללא ארגומנט.

  • מתחשב ב־use locale עבור LC_CTYPE - עם locale פעיל טבלת אותיות־קטנות של ה־locale הנוכחי חלה על נקודות קוד מתחת ל־256.

  • מתחשב ב־use bytes - תחת use bytes רק A-Z משתנים, ל־a-z.

  • מתחשב ב־use feature 'unicode_strings' - מאלץ כללי Unicode ללא קשר לדגל UTF-8 על הקלט.

אילו כללי גודל־אותיות חלים#

Perl בוחרת באחת מארבע מערכות־כללים, בסדר עדיפויות. הראשונה שתנאיה מתקיים מנצחת:

  1. use bytes פעיל - כללי ASCII. רק A-Z ממופים ל־a-z; כל בית אחר נשאר ללא שינוי, כולל בתים בטווח 128-255 שהיו אחרת אותיות Latin-1.

  2. use locale עבור LC_CTYPE פעיל - טבלאות ה־locale הנוכחי חלות על נקודות קוד מתחת ל־256; נקודות קוד 256 ומעלה (נגישות רק כאשר המחרוזת כבר נושאת את דגל UTF-8) משתמשות בכללי Unicode. מ־Perl 5.20 ואילך, locale של UTF-8 משתמש בכללי Unicode מלאים לכל אורכו.

  3. לארגומנט יש דגל UTF-8 מוגדר - כללי Unicode חלים על כל תו.

  4. use feature 'unicode_strings' או use locale ':not_characters' פעיל - כללי Unicode חלים על כל תו, ללא קשר לדגל UTF-8.

  5. אחרת - כללי ASCII. תווים מחוץ ל־A-Z מוחזרים ללא שינוי, כולל אותיות גדולות של Latin-1 כמו À-Þ.

התוצאה: כדי לקבל התנהגות Unicode צפויה על כל מחרוזת ללא קשר לאופן בנייתה, יש להפעיל use feature 'unicode_strings' (או use v5.12 ומעלה, המפעילה זאת עבורכם).

דוגמאות#

המרה לאותיות קטנות ב־ASCII בסיסית:

my $s = lc("Hello, World!");        # "hello, world!"

ברירת מחדל ל־$_:

for ("FOO", "Bar", "BAZ") {
    print lc, "\n";                 # foo / bar / baz
}

תווי Unicode עוברים לאותיות קטנות רק כאשר הכללים מתירים זאת:

use feature 'unicode_strings';
my $s = lc("ÄÖÜ");                  # "äöü"

ללא unicode_strings וללא דגל UTF-8 על הקלט, תווים שאינם ASCII עוברים ללא שינוי:

my $bytes = "\xC4\xD6\xDC";         # Ä Ö Ü as Latin-1 bytes
my $lower = lc $bytes;              # unchanged: "\xC4\xD6\xDC"

lc הוא מה שתומך ב־escape \L...\E בתוך מחרוזות במרכאות כפולות:

my $str = "Perl is \LGREAT\E";      # "Perl is great"

השוואה ללא רגישות לאותיות גדולות וקטנות על־ידי המרת שני הצדדים לאותיות קטנות:

sub ieq { lc($_[0]) eq lc($_[1]) }
ieq("Perl", "PERL");                # true

להשוואה נכונה חסרת־רישיות לרוחב Unicode, מומלץ להעדיף את fc (פונקציית קיפול ה־Unicode) על־פני lc - ראו ראו גם.

מקרי קצה#

  • ארגומנט undef מעלה אזהרת uninitialized תחת use warnings ומחזיר את המחרוזת הריקה.

  • מחרוזת ריקה מחזירה את המחרוזת הריקה.

  • מספרים מומרים תחילה למחרוזת: lc(42) מחזיר "42".

  • LATIN CAPITAL LETTER SHARP S (U+1E9E) מומר לאות קטנה U+00DF (ß) תחת כללי Unicode, אך רק אם התוצאה ניתנת לייצוג בלי לחצות את גבול 255/256 באופן שמערכת־הכללים הנוכחית מקבלת. תחת use locale ב־locale שאינו UTF-8, Perl משאירה את התו ללא שינוי במקום לנחש - ומ־Perl 5.22 ואילך זה מעלה אזהרת locale.

  • Locale ודגל UTF-8 מגיבים זה לזה: תחת use locale ב־locale שאינו UTF-8, תווים מתחת ל־256 עוקבים אחר ה־locale בעוד תווים 256 ומעלה עוקבים אחר Unicode. למחרוזת המכילה את שני הטווחים יוחלו שתי טבלאות גודל־אותיות שונות.

  • משתנים קשורים מקבלים FETCH יחיד. lc אינו משנה את הערך הקשור; הוא מחזיר סקלר רגיל (לא־קשור).

  • lc הוא אופרטור אונרי בעל שם, לא אופרטור רשימה. lc $a, $b מתפרסר כ־(lc $a), $b - רק $a מומר לאותיות קטנות, ואופרטור הפסיק משליך את התוצאה. יש להשתמש בסוגריים או ב־map כאשר רוצים להמיר מספר מחרוזות לאותיות קטנות:

    my @lower = map { lc } @words;
    

הבדלים מ־upstream#

תואם מלא ל־upstream Perl 5.42.

ראו גם#

  • uc - המקבילה להמרה לאותיות גדולות, עם אותם כללי פרגמה ו־locale

  • lcfirst - להמיר רק את התו הראשון לאות קטנה; שימושי לביטול אות־גדולה במשפטים או במזהים

  • fc - casefold של Unicode, הבחירה הנכונה להשוואה חסרת־רישיות כאשר הקלט עשוי להכיל תווים שאינם ASCII

  • $_ - נושא ברירת המחדל ש־lc קורא כאשר נקרא ללא ארגומנט

  • use locale - שולט האם טבלאות locale או כללי ASCII/Unicode חלים על תווים מתחת ל־256

  • use feature 'unicode_strings' - מאלץ גודל־אותיות Unicode מלא ללא קשר לדגל UTF-8 על הקלט