¿Cómo encuentro la longitud de una cadena Unicode en Perl?

losperldoc página paralongitud() me dice que debo usarbytes::length(EXPR) para encontrar una cadena Unicode en bytes, ybytes La página hace eco de esto.

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";

La salida de este script, sin embargo, no está de acuerdo con la página del manual:

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

Me parece que length () y bytes :: length () devuelven lo mismo para ambas cadenas ASCII y Unicode. Tengo mi editor configurado para escribir archivos como UTF-8 de manera predeterminada, así que me imagino que Perl está interpretando todo el script como Unicode. ¿La longitud media () maneja las cadenas Unicode automáticamente?

Editar: Mira mi comentario; mi pregunta no tiene mucho sentido, porque la longitud () esno Funciona "correctamente" en el ejemplo anterior: muestra la longitud de la cadena Unicode en bytes, no en caracteres. La resonancia que encontré originalmente es para un programa en el que necesito configurar el encabezado Content-Lenth (en bytes) en un mensaje HTTP. Había leído sobre Unicode en Perl y esperaba tener que hacer algo de fantasía para hacer que las cosas funcionen, pero cuando la longitud () devolvió exactamente lo que necesitaba justo del bate, ¡estaba confundido! Vea la respuesta aceptada para un resumen deuse utf8, use bytesyno bytes en perl.

Respuestas a la pregunta(3)

Su respuesta a la pregunta