ucfirst#
Επιστρέφει αντίγραφο μιας συμβολοσειράς με τον πρώτο χαρακτήρα της σε titlecase.
Η ucfirst παίρνει μια συμβολοσειρά, μετατρέπει τον πρώτο της χαρακτήρα στη μορφή titlecase του Unicode, και επιστρέφει το αποτέλεσμα. Κάθε άλλος χαρακτήρας αφήνεται ανέγγιχτος. Το αρχικό δεν τροποποιείται ποτέ. Αν το όρισμα παραλειφθεί, η ucfirst λειτουργεί επί της $_. Το titlecase συνήθως συμπίπτει με το uppercase - το "a" γίνεται "A" - αλλά διαφέρει για μικρό αριθμό δίψηφων (digraphs) σε γραφές που διακρίνουν τα δύο (δείτε Οριακές περιπτώσεις). Οι ίδιοι κανόνες pragma, locale και σημαίας UTF-8 που διέπουν τις lc και uc διέπουν και την ucfirst.
Σύνοψη#
ucfirst EXPR
ucfirst
Τι επιστρέφεται#
Μια νέα συμβολοσειρά ίδιου μήκους σε χαρακτήρες με την είσοδο - αλλάζει μόνο ο πρώτος χαρακτήρας. Η τιμή επιστροφής είναι πάντοτε φρέσκο βαθμωτό· η τροποποίησή της δεν επηρεάζει το όρισμα, και η τροποποίηση του ορίσματος εκ των υστέρων δεν επηρεάζει την επιστρεφόμενη συμβολοσειρά. Το μήκος σε bytes μπορεί να αλλάξει κατά μερικά bytes αν η μορφή 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 στην είσοδο.
Ποιοι κανόνες πεζών-κεφαλαίων εφαρμόζονται#
Η ucfirst επιλέγει ένα από πέντε σύνολα κανόνων για τον πρώτο χαρακτήρα, με σειρά προτεραιότητας. Νικά αυτό του οποίου η συνθήκη ισχύει πρώτη. Οι μετέπειτα χαρακτήρες περνούν πάντοτε αμετάβλητοι, ανεξάρτητα από το ποιο σύνολο κανόνων εφαρμόστηκε στον πρώτο.
Σε ισχύ το
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 ορισμένη - οι κανόνες titlecase του Unicode εφαρμόζονται στον πρώτο χαρακτήρα.
Σε ισχύ το
use feature 'unicode_strings'ή τοuse locale ':not_characters'- οι κανόνες titlecase του Unicode εφαρμόζονται στον πρώτο χαρακτήρα, ανεξάρτητα από τη σημαία UTF-8.Διαφορετικά - κανόνες ASCII. Προπορευόμενος χαρακτήρας εκτός
a-zεπιστρέφεται αμετάβλητος, περιλαμβανομένων πεζών γραμμάτων 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 είναι ένα μοναδικό κεφαλαίο ακολουθούμενο από πεζό. Το τυπικό παράδειγμα είναι το λατινικό δίψηφο dz (U+01F3):
το uppercase είναι
DZ(U+01F1) - το"DZ"αποδιδόμενο ως ένα κεφαλαίο γλυφικό.το titlecase είναι
Dz(U+01F2) -"Dz", κεφαλαίοDακολουθούμενο από μικρόz.
Η ucfirst επιστρέφει titlecase, που είναι η σωστή μορφή όταν ο χαρακτήρας στέκεται στην αρχή κεφαλαιοποιημένης λέξης. Η uc στον ίδιο πρώτο χαρακτήρα θα επέστρεφε τη μορφή δύο κεφαλαίων, η οποία διαβάζεται σαν να ήταν ολόκληρη η λέξη με κεφαλαία.
Παραδείγματα#
Βασική μετατροπή πρώτου χαρακτήρα σε κεφαλαίο σε 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 είναι αυτό που υποστηρίζει τη διαφυγή \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 ενός δίψηφου που διακρίνει το titlecase από το uppercase:
use feature 'unicode_strings';
my $t = ucfirst("\x{01F3}xyz"); # "\x{01F2}xyz" - Dz, not DZ
Οριακές περιπτώσεις#
Όρισμα
undefεγείρει προειδοποίησηuninitializedυπόuse warningsκαι επιστρέφει την κενή συμβολοσειρά.Κενή συμβολοσειρά επιστρέφει την κενή συμβολοσειρά - δεν υπάρχει πρώτος χαρακτήρας για αλλαγή.
Συμβολοσειρά ενός χαρακτήρα συμπεριφέρεται ακριβώς όπως θα συμπεριφερόταν η
ucγια εκείνον τον ένα χαρακτήρα υπό το ίδιο σύνολο κανόνων, εκτός από τις περιπτώσεις δίψηφων που περιγράφονται παραπάνω όπου titlecase και uppercase διαφέρουν.Οι αριθμοί μετατρέπονται πρώτα σε συμβολοσειρά: η
ucfirst(42)επιστρέφει"42"- το προπορευόμενο"4"δεν είναι χαρακτήρας με πεζά/κεφαλαία, οπότε δεν αλλάζει τίποτα.Οι προπορευόμενοι λευκοί χαρακτήρες ή σημεία στίξης δεν παραλείπονται. Η
ucfirst(" hello")επιστρέφει" hello"- ο πρώτος χαρακτήρας είναι το κενό, που δεν έχει μορφή titlecase. Αν χρειάζεται να κεφαλαιοποιήσετε το πρώτο γράμμα, αφαιρέστε πρώτα τους προπορευόμενους μη-γράμματα χαρακτήρες ή χρησιμοποιήστε regex (s/\b(\w)/\u$1/).Το
LATIN SMALL LETTER SHARP S(U+00DF,ß) μετατρέπεται σε titlecase σε"Ss"υπό πλήρεις κανόνες Unicode - αλλαγή μήκους που αντιφάσκει με τη συνηθισμένη εγγύηση «ίδιο μήκος σε χαρακτήρες». Υπόuse localeσε μη-UTF-8 locale, η Perl αφήνει τον χαρακτήρα αμετάβλητο αντί να μαντέψει, και από την Perl 5.22 και ύστερα αυτό εγείρει προειδοποίηση locale.Το locale και η σημαία UTF-8 αλληλεπιδρούν: υπό
use localeσε μη-UTF-8 locale, ένας πρώτος χαρακτήρας κάτω από το 256 ακολουθεί το locale ενώ ένας πρώτος χαρακτήρας 256 ή πάνω ακολουθεί το Unicode. Στην πράξη ηucfirstαγγίζει πάντοτε μόνο έναν χαρακτήρα, οπότε η αλληλεπίδραση είναι λεπτότερη από ό,τι στιςlc/uc, αλλά εξακολουθεί να είναι παρατηρήσιμη σε συμβολοσειρές που ξεκινούν με χαρακτήρες συμπληρωματικού επιπέδου.Οι μεταβλητές με tie δέχονται την κλήση του
FETCHτους μία φορά. Ηucfirstδεν τροποποιεί την τιμή με tie· επιστρέφει απλό (χωρίς tie) βαθμωτό.Η
ucfirstείναι μοναδιαίος ονομασμένος τελεστής, όχι τελεστής λίστας. Ηucfirst $a, $bαναλύεται ως(ucfirst $a), $b- μετασχηματίζεται μόνο η$a, και ο τελεστής κόμμα απορρίπτει το αποτέλεσμα. Χρησιμοποιήστε παρενθέσεις ήmapόταν εννοείτε να μετατρέψετε σε titlecase πολλαπλές συμβολοσειρές:my @capped = map { ucfirst } @words;
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
lcfirst- το αντίστοιχο για πεζά· μετατρέπει τον πρώτο χαρακτήρα στην πεζή του μορφήuc- μετατρέπει σε κεφαλαία κάθε χαρακτήρα της συμβολοσειράς· χρησιμοποιήστε όταν θέλετε όλη τη συμβολοσειρά κεφαλαιοποιημένη, όχι μόνο το πρώτο γράμμαfc- casefold του Unicode, η σωστή επιλογή για σύγκριση χωρίς διάκριση πεζών-κεφαλαίων όταν η είσοδος μπορεί να περιέχει μη-ASCII$_- το προεπιλεγμένο υποκείμενο που διαβάζει ηucfirstόταν καλείται χωρίς όρισμαuse locale- ελέγχει αν εφαρμόζονται οι πίνακες locale ή οι κανόνες ASCII/Unicode στον πρώτο χαρακτήρα όταν αυτός είναι κάτω από το σημείο κώδικα 256use feature 'unicode_strings'- επιβάλλει πλήρη titlecasing Unicode ανεξάρτητα από τη σημαία UTF-8 στην είσοδο