Wie finde ich die Länge eines Unicode-Strings in Perl?

Dasperldoc Seite fürLänge() sagt mir, dass ich verwenden sollbytes::length(EXPR) um eine Unicode-Zeichenfolge in Bytes zu finden, oder und dieBytes Seite spiegelt dies wider.

use bytes;
$ascii = 'Lorem ipsum dolor sit amet';
$unicode = 'Lørëm ípsüm dölör sît åmét';

print "ASCII: " . length($ascii) . "\n";
print "ASCII bytes: " . bytes::length($ascii) . "\n";
print "Unicode: " . length($unicode) . "\n";
print "Unicode bytes: " . bytes::length($unicode) . "\n";

Die Ausgabe dieses Skripts stimmt jedoch nicht mit der Manpage überein:

ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35

Es scheint mir, dass length () und bytes :: length () für ASCII- und Unicode-Zeichenfolgen dasselbe zurückgeben. Ich habe meinen Editor so eingestellt, dass Dateien standardmäßig als UTF-8 geschrieben werden. Ich glaube, Perl interpretiert das gesamte Skript als Unicode. Bedeutet das, dass length () Unicode-Zeichenfolgen automatisch richtig verarbeitet?

Bearbeiten: Siehe meinen Kommentar; Meine Frage ergibt nicht viel Sinn, weil length () istnicht Funktioniert im obigen Beispiel "richtig" - es zeigt die Länge der Unicode-Zeichenfolge in Byte und nicht in Zeichen. Der Resonanzfaktor, über den ich ursprünglich gestolpert bin, ist für ein Programm, in dem ich den Content-Lenth-Header (in Byte) in einer HTTP-Nachricht festlegen muss. Ich hatte Unicode in Perl nachgelesen und hatte erwartet, etwas Phantasie zu haben, um die Dinge zum Laufen zu bringen, aber als length () genau das zurückgab, was ich brauchte, war ich verwirrt! In der akzeptierten Antwort finden Sie eine Übersicht überuse utf8, use bytes, undno bytes in Perl.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage