Βαθμωτά και συμβολοσειρές

lcfirst#

Επιστρέφει αντίγραφο συμβολοσειράς με τον πρώτο χαρακτήρα της μετατραμμένο σε πεζό.

Η lcfirst αγγίζει μόνο τον πρώτο χαρακτήρα· το υπόλοιπο της συμβολοσειράς αντιγράφεται αυτούσιο. Η είσοδος δεν τροποποιείται - η lcfirst επιστρέφει νέα συμβολοσειρά. Είναι η εσωτερική συνάρτηση που υλοποιεί την ακολουθία διαφυγής \l σε συμβολοσειρές με διπλά εισαγωγικά, οπότε η "\l$name" και η lcfirst($name) παράγουν το ίδιο αποτέλεσμα.

Αν παραλειφθεί η EXPR, η lcfirst λειτουργεί στην $_.

Σύνοψη#

lcfirst EXPR
lcfirst

Τι επιστρέφεται#

Μια νέα συμβολοσειρά ίση με την EXPR με τον πρώτο χαρακτήρα της αντικατεστημένο από την πεζή μορφή που παράγουν οι κανόνες case-folding του χαρακτήρα. Το υπόλοιπο της συμβολοσειράς παραμένει ανέπαφο. Αν η EXPR είναι η κενή συμβολοσειρά, επιστρέφεται η κενή συμβολοσειρά. Αν η EXPR είναι undef, το αποτέλεσμα είναι η κενή συμβολοσειρά και εκπέμπεται προειδοποίηση uninitialized υπό use warnings.

Η lcfirst δεν μεταλλάσσει ποτέ το όρισμά της. Για να μετατρέψετε επιτόπια τον πρώτο χαρακτήρα σε πεζό, αναθέστε το αποτέλεσμα πίσω:

$name = lcfirst $name;

Για την παραλλαγή όλων-των-χαρακτήρων, βλ. lc.

Καθολική κατάσταση που επηρεάζει#

  • $_ - διαβάζεται όταν η EXPR παραλείπεται.

  • locale LC_CTYPE - συμβουλεύεται όταν είναι ενεργή η use locale (βλ. Pragmas και κανόνες πεζών-κεφαλαίων παρακάτω).

Pragmas και κανόνες πεζών-κεφαλαίων#

Η lcfirst συμπεριφέρεται με τον ίδιο τρόπο υπό διάφορες pragmas όπως η lc. Το ενεργό σύνολο κανόνων για τον πρώτο χαρακτήρα εξαρτάται από το ποιες pragmas είναι σε εμβέλεια στο σημείο κλήσης:

  • use bytes - μόνο κανόνες ASCII. Μόνο τα bytes A-Z μετατρέπονται σε a-z· κάθε άλλο byte επιστρέφεται αμετάβλητο.

  • use locale (για LC_CTYPE) - το τρέχον locale αποφασίζει τη μετατροπή για σημεία κώδικα κάτω του 256. Τα σημεία κώδικα 256 και άνω μετατρέπονται με κανόνες Unicode όταν η συμβολοσειρά έχει ορισμένη τη σημαία UTF-8. Ένα UTF-8 locale ενεργοποιεί πλήρεις κανόνες Unicode από την Perl 5.20 και μετά.

  • Συμβολοσειρά με σημαία UTF-8 - εφαρμόζονται κανόνες case-folding Unicode.

  • use feature 'unicode_strings' or use locale ':not_characters'

    • Unicode rules apply regardless of the UTF-8 flag.

  • Διαφορετικά - κανόνες ASCII. Χαρακτήρες εκτός ASCII επιστρέφονται αμετάβλητοι.

Αυτό σημαίνει ότι η ίδια lcfirst("É...") μπορεί να επιστρέψει "é..." υπό use utf8 ή use feature 'unicode_strings', και "É..." (αμετάβλητη) υπό τις προεπιλογές καθαρού ASCII. Όταν έχει σημασία η φορητότητα μεταξύ pragmas, δηλώστε ρητά το σύνολο κανόνων:

use feature 'unicode_strings';
my $s = lcfirst $input;        # Unicode rules regardless of UTF-8 flag

Παραδείγματα#

Βασική κλήση, μετατροπή του πρώτου γράμματος μιας λέξης σε πεζό:

my $s = lcfirst "Hello, World";    # "hello, World"

Κανονικοποίηση title-case για μια λίστα ονομάτων, όπου ο καλών θέλει το πρώτο γράμμα σε πεζό για ένα URL slug:

my @slugs = map { lcfirst } @CamelCaseNames;

Η μορφή προεπιλεγμένου ορίσματος διαβάζει από την $_:

for ("Apple", "Banana", "Cherry") {
    print lcfirst, "\n";           # "apple", "banana", "cherry"
}

Αλλάζει μόνο ο πρώτος χαρακτήρας - τα μεταγενέστερα κεφαλαία διατηρούνται. Αυτό έχει σημασία για αναγνωριστικά camelCase που προέρχονται από PascalCase:

my $method = lcfirst "GetUserName";   # "getUserName"

Οι κανόνες Unicode πρέπει να ζητηθούν ρητά, είτε μέσω συμβολοσειράς εισόδου με σημαία UTF-8 είτε μέσω του χαρακτηριστικού unicode_strings:

use feature 'unicode_strings';
my $s = lcfirst "Éclair";          # "éclair"
my $s = lcfirst "Éclair";          # without unicode_strings and no
                                   # UTF-8 flag: "Éclair" unchanged

Η ακολουθία διαφυγής \l σε συμβολοσειρά με διπλά εισαγωγικά είναι ακριβώς lcfirst στον επόμενο χαρακτήρα:

my $name = "Perl";
print "\l$name\n";                 # "perl\n"

Οριακές περιπτώσεις#

  • Κενή συμβολοσειρά: η lcfirst("") επιστρέφει "". Καμία προειδοποίηση.

  • Είσοδος undef: η lcfirst(undef) επιστρέφει "". Εκπέμπει προειδοποίηση uninitialized υπό use warnings.

  • Πρώτος χαρακτήρας ήδη πεζός: επιστρέφεται αμετάβλητος· καμία ειδική περίπτωση, καμία συντόμευση που πρέπει να γνωρίζει ο χρήστης.

  • Ο πρώτος χαρακτήρας δεν έχει αντιστοίχιση σε πεζά (ψηφίο, σημείο στίξης, σύμβολο, οι περισσότεροι CJK): επιστρέφεται αμετάβλητος.

  • Case folds πολλαπλών σημείων κώδικα: ορισμένοι χαρακτήρες Unicode μετατρέπονται σε πεζά σε περισσότερα από ένα σημεία κώδικα (π.χ. τα τουρκικά ζεύγη dotted/dotless I σε locale-tailored folds). Η lcfirst ακολουθεί την απλή αντιστοίχιση σε πεζά του Unicode, που είναι πάντα μονού-σημείου-κώδικα - δεν εκτελεί πλήρες case folding. Χρησιμοποιήστε την lc σε συνδυασμό με κανονικοποίηση, ή ρητό Unicode::CaseFold, όταν έχει σημασία η σημασιολογία πλήρους fold.

  • Εκπλήξεις locale γύρω από το 255/256: υπό use locale με μη-UTF-8 locale, ένας πρώτος χαρακτήρας του οποίου η μετατροπή σε πεζό θα διέσχιζε το όριο 255/256 επιστρέφεται αμετάβλητος, και από την Perl 5.22 και μετά εκπέμπεται προειδοποίηση locale.

  • Δεν είναι list-aware: η lcfirst είναι βαθμωτός τελεστής. Η lcfirst @list παίρνει το scalar(@list) - το πλήθος στοιχείων - και μετατρέπει σε πεζό τον πρώτο χαρακτήρα του, σχεδόν ποτέ αυτό που ήθελε ο καλών. Χρησιμοποιήστε map { lcfirst } @list για μετατροπή σε πεζά ανά στοιχείο.

Διαφορές από το upstream#

Πλήρως συμβατό με το upstream Perl 5.42.

Δείτε επίσης#

  • lc - μετατρέπει κάθε χαρακτήρα σε πεζό, όχι μόνο τον πρώτο· ίδιοι κανόνες ευαισθησίας σε pragma

  • ucfirst - μετατρέπει τον πρώτο χαρακτήρα σε κεφαλαίο· η ακριβώς αντίστροφη λειτουργία

  • uc - μετατρέπει κάθε χαρακτήρα σε κεφαλαίο

  • fc - Unicode case-folding κατάλληλο για σύγκριση χωρίς διάκριση πεζών-κεφαλαίων, όχι για εμφάνιση

  • $_ - προεπιλεγμένο όρισμα όταν η EXPR παραλείπεται