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

y///#

מתעתק תווים במחרוזת. y/// הוא שם נרדף ל־tr/// - השניים זהים מכל בחינה.

האיות y ניתן עבור מאמיני sed, שזיכרון השרירים שלהם מפיק y/abc/ABC/ במקום tr/abc/ABC/. המפרסר של Perl מקבל אחד מהם; ה־op התוצאתי זהה. השתמש באיות שנקרא יותר טוב בקוד שמסביב - אם הקובץ כבר מצטט סקריפט sed, y/// לעיתים מתאים; ב־Perl רענן, tr/// נפוץ יותר.

תקציר#

y/SEARCHLIST/REPLACEMENTLIST/cdsr
$var =~ y/SEARCHLIST/REPLACEMENTLIST/cdsr
y/SEARCHLIST/REPLACEMENTLIST/      # transliterates $_

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

זהה ל־tr///:

  • ללא /r: מספר התווים שהותאמו (והוחלפו או נמחקו), לאחר שינוי המטרה במקום.

  • עם /r: מחרוזת חדשה עם התעתוק שהוחל; המקור אינו נוגע.

דוגמאות#

תעתוק קלאסי בסגנון sed להפיכה לאותיות גדולות על $_:

while (<>) {
    y/a-z/A-Z/;
    print;
}

ספירת תנועות מבלי לשנות את המחרוזת, באמצעות /r להשלכת העותק המתעתק:

my $vowels = ($text =~ y/aeiouAEIOU//) ;   # count in place is fine too
my $count  = () = $text =~ /[aeiouAEIOU]/g;

הסרת כל דבר חוץ מספרות ממחרוזת (עותק לא הרסני דרך /r, השלמה + מחיקה):

my $digits = $phone =~ y/0-9//cdr;         # "(415) 555-1212" → "4155551212"

Rot13 - שורת ה־y/// של ספר הלימוד:

(my $coded = $plain) =~ y/A-Za-z/N-ZA-Mn-za-m/;

מקרי קצה#

ראה tr/// לרשימה המלאה. שניים שכדאי לחזור עליהם כאן:

  • אין שיבוץ משתנים. y/$x/$y/ מתעתק את התווים המילוליים $, x כנגד $, y - לא את תוכן אותם משתנים. זה תואם ל־tr/// והוא הבאג היחיד הנפוץ ביותר בתרגום מ־sed ל־Perl.

  • y'...'...' מבטל טווחים. עם מתחמי גרש בודד, - הוא מילולי: y'a-z'A-Z' מתעתק רק את a, -, z כנגד A, -, Z.

הבדלים מ־upstream#

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

ראו גם#

  • tr/// - האיות הקנוני; סמנטיקה זהה, אותם דגלים (/c, /d, /s, /r), אותם מקרי קצה

  • s/// - החלפה מבוססת־תבנית כשמיפוי תו־אחר־תו אינו מספיק

  • lc, uc - שינוי רישיות מודע ל־locale ול־Unicode; עדיף עליהם על־פני y/a-z/A-Z/ עבור כל דבר מעבר ל־ASCII

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