Dateinamen sind Strings. Die bestehen aus ZEICHEN.
Nein, Sie bestehen aus Bytes (Oktetten)! Erst die Shell stellt aus diesen Oktetten lesbare Zeichen her. Genauso wie das auch mit Perl gemacht werden kann.
Und genau das zeigt der Code den ich hier kommunizierte. Was ist daran nicht zu verstehen!?
# interne Kodierung einschalten
my $utf8 = decode_utf8($oktetten);
Erst ab da kommt die Kodierung ins Spiel: Damit die Codepoints ermittelt werden können, damit man die Zeichen in der richtigen Kodierung ausgeben kann. Und dasselbe kannst Du auch in der POD zu Encode nachlesen. Und hier
Das ganze Chaos hier kommt von Unverständnis!
Schönen Sonntag.