chr#
Επιστρέφει τον χαρακτήρα του οποίου το σημείο κώδικα είναι ο δοθείς αριθμός.
Η chr παίρνει έναν μη αρνητικό ακέραιο και επιστρέφει συμβολοσειρά ενός χαρακτήρα που περιέχει τον χαρακτήρα σε αυτό το σημείο κώδικα του τρέχοντος συνόλου χαρακτήρων. Η chr(65) δίνει "A" τόσο σε ASCII όσο και σε Unicode· η chr(0x263a) δίνει το χαμογελαστό πρόσωπο Unicode ☺. Αν παραλειφθεί το NUMBER, η chr λειτουργεί στο $_. Η αντίστροφη λειτουργία είναι η ord.
Σύνοψη#
chr NUMBER
chr
chr($n)
Τι επιστρέφεται#
Συμβολοσειρά μήκους ενός χαρακτήρα. Με σημασιολογία Unicode - προεπιλογή για οποιοδήποτε σημείο κώδικα πάνω από το 0x7f - αυτός ο χαρακτήρας μπορεί να κωδικοποιείται εσωτερικά ως πολλά bytes UTF-8, οπότε η length αναφέρει 1 ενώ η bytes::length μπορεί να αναφέρει έως τέσσερα. Για σημεία κώδικα στο εύρος 0..127 το αποτέλεσμα είναι μονοβυτική συμβολοσειρά ASCII και τα δύο μήκη συμπίπτουν.
Καθολική κατάσταση που επηρεάζει#
Χωρίς όρισμα, η chr διαβάζει το $_. Δεν γράφει τίποτα. Η pragma bytes αλλάζει το τι κάνει η chr με είσοδο εκτός εύρους ή αρνητική (δείτε Οριακές περιπτώσεις)· καμία άλλη pragma ή ειδική μεταβλητή δεν την επηρεάζει.
Παραδείγματα#
Χαρακτήρας ASCII από το σημείο κώδικά του:
print chr(65); # A
print chr(97), "\n"; # a
Δόμηση συμβολοσειράς από λίστα σημείων κώδικα με map και join:
my @code = (72, 101, 108, 108, 111);
print join("", map { chr } @code), "\n"; # Hello
Σημείο κώδικα Unicode πάνω από το εύρος ASCII - το αποτέλεσμα είναι ένας χαρακτήρας, τέσσερα bytes στην εσωτερική του μορφή UTF-8:
use utf8;
my $smiley = chr(0x263a);
print length($smiley); # 1
use bytes; print length($smiley); # 3
Πλήρης κύκλος με την ord - για κάθε μονό χαρακτήρα $c, ισχύει η ταυτότητα chr(ord($c)) eq $c:
my $c = "Z";
print chr(ord($c)) eq $c ? "yes" : "no"; # yes
Μορφή προεπιλεγμένου ορίσματος μέσα σε βρόχο πάνω από το $_:
for (65, 66, 67) {
print chr; # prints ABC
}
Η αρνητική είσοδος αποδίδει τον χαρακτήρα αντικατάστασης Unicode U+FFFD:
print chr(-1) eq "\x{fffd}" ? "repl" : "?"; # repl
Οριακές περιπτώσεις#
Κλασματικό όρισμα: αποκόπτεται προς το μηδέν πριν την αναζήτηση. Η
chr(65.9)επιστρέφει"A".Μη αριθμητική συμβολοσειρά: μετατρέπεται με τους κανονικούς κανόνες αριθμητικού εξαναγκασμού, με προειδοποίηση υπό
use warnings. Ηchr("65abc")επιστρέφει"A".Η
chr(undef)επιστρέφειchr(0), τον χαρακτήραNUL"\0", και προειδοποιεί υπόuse warningsγια χρήση μη αρχικοποιημένης τιμής.Αρνητικές τιμές: εκτός της pragma
bytes, η αρνητική είσοδος επιστρέφει τον χαρακτήρα αντικατάστασης Unicode"\x{fffd}". Υπόuse bytes, χρησιμοποιούνται τα χαμηλά οκτώ bits της ακέραιας τιμής: ηchr(-1)αποδίδει το byte"\xff".Τιμές πάνω από
0x10ffff(το μέγιστο σημείο κώδικα Unicode) εξακολουθούν να επιστρέφουν συμβολοσειρά ενός χαρακτήρα υπό την προεπιλεγμένη σημασιολογία, αλλά εκπέμπουν προειδοποίησηUnicode non-character is illegal for interchangeγια τα εύρη μη-χαρακτήρων, και προειδοποίησηUnicode surrogate U+...για το εύρος surrogate0xd800..0xdfffόταν η συμβολοσειρά κωδικοποιηθεί αργότερα.Το εύρος 128..255: οι χαρακτήρες σε αυτό το εύρος εξ ορισμού δεν αποθηκεύονται εσωτερικά ως UTF-8, για συμβατότητα με συμβολοσειρές bytes. Συγκρίνονται ίσοι με τη μονοβυτική τους μορφή και με το ίδιο σημείο κώδικα Unicode· η εσωτερική αναπαράσταση έχει σημασία μόνο όταν τους εξετάζετε με
bytes::lengthή όταν αλληλεπιδράτε με στρώματα PerlIO.Η
chrδεν εγείρει ποτέ croak για οποιαδήποτε αριθμητική είσοδο. Τα σφάλματα αναδύονται μόνο ως προειδοποιήσεις, ποτέ ως εξαιρέσεις.Δεν είναι lvalue: η
chrεπιστρέφει φρέσκο βαθμωτό. Ηchr(65) = "B"είναι συντακτικό σφάλμα.
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
ord- αντίστροφη τηςchr: σημείο κώδικα του πρώτου χαρακτήρα μιας συμβολοσειράςsprintf- ηsprintf "%c", $nείναι ισοδύναμη με τηνchr $n· χρησιμοποιήστε την για να εμβολιάσετε έναν χαρακτήρα σε μια μεγαλύτερη μορφή με μία κλήσηpack- δόμηση πολυχαρακτηρικής συμβολοσειράς από λίστα σημείων κώδικα με μία κλήση (pack "U*", @codeγια Unicode,pack "C*", @codeγια bytes)hex- αναλύει δεκαεξαδική συμβολοσειρά στον ακέραιο που στη συνέχεια περνάτε στηνchr· ζευγαρώνει με τηνchrκατά την αποκωδικοποίηση συμβολισμούU+XXXXuse bytes- pragma που μεταβάλλει τηνchrσε σημασιολογία προσανατολισμένη σε bytes για τιμές εκτός του0..0x7fperlunicode- υπόβαθρο για τον τρόπο με τον οποίο η Perl αποθηκεύει και συγκρίνει συμβολοσειρές Unicode