hi @Rolf B
Das globben mit <*>
liefert dasselbe wie readdir
, es unterdrückt jedoch die Platzhalter .
und ..
. Für unsere Zwecke ist das unerheblich.
Dein Test steht als Solcher bereits im Artikel:
Abschließend betrachten wir noch den umgekehrten Fall: Die Codepage sei 1252 auf einen WinXP und wir legen eine Datei an mit dem Namen ä. Dazu benutzen wir jedoch nicht Perl sondern den Explorer. Mit Perl jedoch lesen wir das Verzeichnis aus und erhalten den Namen der Datei:
$, = " ";
chdir "d:/tmp/files";
my $fname = <*>;
print $fname, length $fname;
# ä 1
Dieser Code, weil er bytesemantisch arbeitet, liefert also die Oktetten zum Dateinamen. Folgerichtig gibt length() nicht die Anzahl der Zeichen sondern die Anzahl der Oktetten aus, in unserem Fall eine 1.
Eurozeichen: cp1252 kodiert es mit einem Byte der Wertigkeit 0x80
Fazit: Jedes Problem in Sachen Zeichenkodierung ist lösbar! Und meine Artikel zeigen auch das Wie und das Warum. Seit Perl intern zwischen Byte~ und Charaktersementic in Strings unterscheidet gibts immer wieder Missverständnisse: Weil es nicht verstanden wird!
Aber daß beim Speichern grundsätzlich die Bytesemantic gilt, ist keine Erfindung von Perl, das war schon immer so. So ist die kleinste Speichereinheit eben nicht das Zeichen sondern das Byte!
MfG