lc#
Επιστρέφει αντίγραφο μιας συμβολοσειράς μετατραμμένο σε πεζά.
Η lc παίρνει μια συμβολοσειρά, μετατρέπει κάθε χαρακτήρα με διάκριση πεζών-κεφαλαίων στο πεζό ισοδύναμό του και επιστρέφει το αποτέλεσμα. Το πρωτότυπο δεν τροποποιείται ποτέ. Αν παραλειφθεί το όρισμα, η lc λειτουργεί στην $_. Το ακριβές σύνολο χαρακτήρων που αλλάζει εξαρτάται από την κωδικοποίηση της συμβολοσειράς και τις pragmas που είναι σε εμβέλεια στο σημείο κλήσης - μόνο ASCII εξ ορισμού, πλήρες Unicode υπό use feature 'unicode_strings' ή όταν η είσοδος είναι ήδη συμβολοσειρά χαρακτήρων με τη σημαία UTF-8.
Σύνοψη#
lc EXPR
lc
Τι επιστρέφεται#
Μια νέα συμβολοσειρά. Η τιμή επιστροφής είναι πάντα ένα καινούργιο βαθμωτό - η τροποποίησή της δεν επηρεάζει το όρισμα, και η εκ των υστέρων τροποποίηση του ορίσματος δεν επηρεάζει την επιστρεφόμενη συμβολοσειρά. Το μήκος σε χαρακτήρες διατηρείται: η lc ποτέ δεν προσθέτει ή αφαιρεί χαρακτήρες, ακόμη και στις σπάνιες περιπτώσεις Unicode όπου οι μορφές πεζών και κεφαλαίων έχουν διαφορετικά μήκη σε άλλες κατευθύνσεις (βλ. fc για casefold, που μπορεί να αλλάξει το μήκος).
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 επιλέγει ένα από τέσσερα σύνολα κανόνων, με σειρά προτεραιότητας. Νικάει το πρώτο του οποίου η συνθήκη ισχύει:
use bytesενεργή - κανόνες ASCII. Μόνο ταA-Zαντιστοιχίζονται σεa-z· κάθε άλλο byte παραμένει αμετάβλητο, συμπεριλαμβανομένων bytes στο εύρος 128-255 που διαφορετικά θα ήταν γράμματα Latin-1.use localeγιαLC_CTYPEενεργή - οι πίνακες του τρέχοντος locale εφαρμόζονται σε σημεία κώδικα κάτω του 256· τα σημεία κώδικα 256 και άνω (προσβάσιμα μόνο όταν η συμβολοσειρά φέρει ήδη τη σημαία UTF-8) χρησιμοποιούν κανόνες Unicode. Από την Perl 5.20 και μετά, ένα UTF-8 locale χρησιμοποιεί πλήρεις κανόνες Unicode παντού.Το όρισμα έχει σημαία UTF-8 ορισμένη - κανόνες Unicode εφαρμόζονται σε κάθε χαρακτήρα.
use feature 'unicode_strings'ήuse locale ':not_characters'ενεργή - κανόνες Unicode εφαρμόζονται σε κάθε χαρακτήρα, ανεξάρτητα από τη σημαία UTF-8.Διαφορετικά - κανόνες 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 είναι αυτή που υποστηρίζει την ακολουθία διαφυγής \L...\E μέσα σε συμβολοσειρές με διπλά εισαγωγικά:
my $str = "Perl is \LGREAT\E"; # "Perl is great"
Σύγκριση χωρίς διάκριση πεζών-κεφαλαίων με μετατροπή και των δύο πλευρών σε πεζά:
sub ieq { lc($_[0]) eq lc($_[1]) }
ieq("Perl", "PERL"); # true
Για σωστή σύγκριση χωρίς διάκριση πεζών-κεφαλαίων σε όλο το Unicode, προτιμήστε την fc (τη συνάρτηση casefold του Unicode) έναντι της lc - βλ. Δείτε επίσης.
Οριακές περιπτώσεις#
Όρισμα
undefεγείρει προειδοποίησηuninitializedυπόuse warningsκαι επιστρέφει την κενή συμβολοσειρά.Κενή συμβολοσειρά επιστρέφει την κενή συμβολοσειρά.
Οι αριθμοί μετατρέπονται πρώτα σε συμβολοσειρά: η
lc(42)επιστρέφει"42".Το
LATIN CAPITAL LETTER SHARP S(U+1E9E) μετατρέπεται σε πεζό U+00DF (ß) υπό κανόνες Unicode, αλλά μόνο αν το αποτέλεσμα μπορεί να αναπαρασταθεί χωρίς να διασχιστεί το όριο 255/256 με τρόπο που αποδέχεται το τρέχον σύνολο κανόνων. Υπόuse localeσε μη-UTF-8 locale, η Perl αφήνει τον χαρακτήρα αμετάβλητο αντί να μαντέψει - και από την Perl 5.22 και μετά αυτό εγείρει προειδοποίηση locale.Το locale και η σημαία UTF-8 αλληλεπιδρούν: υπό
use localeσε μη-UTF-8 locale, οι χαρακτήρες κάτω του 256 ακολουθούν το locale ενώ οι χαρακτήρες 256 και άνω ακολουθούν το Unicode. Μια συμβολοσειρά που περιέχει και τα δύο εύρη θα δεχτεί δύο διαφορετικούς πίνακες πεζών-κεφαλαίων.Tied μεταβλητές καλούν την
FETCHμία φορά. Ηlcδεν τροποποιεί την tied τιμή· επιστρέφει ένα απλό (μη-tied) βαθμωτό.Η
lcείναι ονομασμένος μοναδιαίος τελεστής, όχι τελεστής λίστας. Ηlc $a, $bαναλύεται ως(lc $a), $b- μόνο το$aμετατρέπεται σε πεζά, και ο τελεστής κόμματος απορρίπτει το αποτέλεσμα. Χρησιμοποιήστε παρενθέσεις ή τηνmapόταν θέλετε να μετατρέψετε πολλαπλές συμβολοσειρές σε πεζά:my @lower = map { lc } @words;
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
uc- το αντίστροφο που μετατρέπει σε κεφαλαία, με τους ίδιους κανόνες pragma και localelcfirst- μετατρέπει σε πεζά μόνο τον πρώτο χαρακτήρα· χρήσιμη για αποκεφαλαιοποίηση προτάσεων ή αναγνωριστικώνfc- Unicode casefold, η σωστή επιλογή για σύγκριση χωρίς διάκριση πεζών-κεφαλαίων όταν η είσοδος μπορεί να περιέχει μη-ASCII$_- το προεπιλεγμένο υποκείμενο που διαβάζει ηlcόταν καλείται χωρίς όρισμαuse locale- ελέγχει αν εφαρμόζονται πίνακες locale ή κανόνες ASCII/Unicode στους χαρακτήρες κάτω του 256use feature 'unicode_strings'- επιβάλλει πλήρη σημασιολογία πεζών-κεφαλαίων Unicode ανεξάρτητα από τη σημαία UTF-8 της εισόδου