Der Ausgang des folgenden minimalen Beispiels zeigt, dass (auf meinem Linux-Rechner) File :: Glob die unerwartete Nebenwirkung der Umwandlung ein UTF-8-String in Nicht-UTF-8 zu haben scheint:Sollte Perls Datei :: Glob immer durch utf8 :: decode nachfiltert werden?
Dies verursacht falsche#!/usr/bin/perl
use utf8;
use strict;
my $x = "påminnelser";
my $y = glob $x;
print "x=",utf8::is_utf8($x),"=\n";
print "y=",utf8::is_utf8($y),"=\n";
Verhalten in meinem Programm. Unter Linux sieht es so aus, als könnte ich es beheben, indem ich utf8 :: decode() nach File :: Glob anwende. Ist das der richtige Weg, das zu beheben? Ist das ein Fehler in File :: Glob? Werden auf anderen Systemen wie Windows korrekte Ergebnisse erzielt?
Danke für die hilfreichen Informationen, +1. Aber das beantwortet meine Frage nicht, nämlich ob mein Workaround korrekt und/oder ratsam war. Ich möchte meinen Benutzern nicht willkürlich mitteilen, dass sie keine Nicht-ASCII-Dateinamen haben können. –
Es ist nur ratsam, wenn alle Ihre Benutzer utf8 als Kodierung für Dateinamen verwenden. Wenn Sie Benutzer haben, die sagen, no_NO.ISO8859-1 als ihr Gebietsschema und Dateinamen entsprechend diesem Gebietsschema erstellen, dann wird es nicht funktionieren. In diesem Fall müssen Sie raten, vielleicht mit 'Encode :: Guess' oder ähnlichen Modulen. –
Ich sehe. Ich denke also, die Antwort auf meine Frage ist, dass meine vorgeschlagene Problemumgehung eine schlechte Idee ist und wahrscheinlich für einige Benutzer kaputt gehen wird. +1 –