y///#
Μεταγραμματίζει χαρακτήρες σε μια συμβολοσειρά. Το y/// είναι συνώνυμο του tr/// - τα δύο είναι πανομοιότυπα από κάθε άποψη.
Η γραφή y παρέχεται για τους πιστούς του sed, η μυϊκή μνήμη των οποίων παράγει y/abc/ABC/ αντί για tr/abc/ABC/. Ο αναλυτής της Perl δέχεται οποιοδήποτε από τα δύο· η op που προκύπτει είναι η ίδια. Χρησιμοποιήστε όποια γραφή διαβάζεται καλύτερα στον περιβάλλοντα κώδικα - αν το αρχείο ήδη παραθέτει ένα script 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, complement + delete):
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///και είναι το πιο συνηθισμένο bug μετάφρασης από 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$_- ο προεπιλεγμένος στόχος όταν δεν δίνεται δέσμευση=~