In Perl ist das ganz einfach: Wenn Du _nicht_ dekodierst, hast Du Bytes. Wenn Du dekodierst, hast Du einen String.
Bullshit.
Um Byte Interpretation zu erhalten, brauchst du das bytes Pragma.
Ausgenommen sind Funktionen oder Operatoren, die implizit Byteorientiert sind.
Wenn du Tests mit UTF8 im Quellcode machst, musst du auch das utf8 Pragma verwenden, damit Perl deinen Quellcode als UTF8 versteht.
Bei I/O Operationen erkennt Perl automatisch UTF-8 und setzt das MB-Flag für die jeweiligen Variablen. Das ist es, was das Arbeiten mit UTF8 seit 5.8 so einfach macht.
#!perl
use warnings;
use strict;
use constant { NL => "\n" };
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">error.txt") or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
use utf8;
{
use bytes;
my $x = "ö";
print length($x), NL;
}
{
no bytes;
my $x = "ö";
print length($x), NL;
}
<>;
exit;
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische