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

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+... για το εύρος surrogate 0xd800..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+XXXX

  • use bytes - pragma που μεταβάλλει την chr σε σημασιολογία προσανατολισμένη σε bytes για τιμές εκτός του 0..0x7f

  • perlunicode - υπόβαθρο για τον τρόπο με τον οποίο η Perl αποθηκεύει και συγκρίνει συμβολοσειρές Unicode