hallo
Hier lese ich filenamen über readdir ein und gebe das Ergebnis an HTML aus, während der HTML Output als UTF-8 deklariert ist.
readdir liefert keine kodierten Zeichenketten. Von daher ist encode_utf8
nicht nur überflüssig sondern falsch.
Was das Anlegen von Dateien betrifft:
Um nicht erlaubte Zeichen im Namen kümmert sich die Shell. Da Perl an der Shell vorbei mit dem OS kommuniziert, musst Du Dich selbst darum kümmern. Hierzu ist festzustellen, daß Perl auch Dateien mit unerlaubten Zeichen im Namen anlegen kann. Und es gibt Dateien, die können nach dem Anlegen nicht mit Perl, jedoch in der Shell gelöscht werden. Es ist also auch eine Frage, ob und wie Deine Dateien wieder sichbar gemacht werden können.
Teste das am Besten mal selbst:
use strict;
use wanings;
use IO::File;
my $dir = "d:/tmp/files";
my $fh = IO::File->new;
# Dateien anlegen
foreach my $c ( 0..255 ){
my $filename = pack "C", $c;
$fh->open("$dir/$filename", O_CREAT|O_RDWR) or do{
printf "Kann Datei mit Name %s Ord %d nicht anlegen\n", $filename, $c;
next;
};
}
# Dateien löschen
chdir $dir or die $!;
my @files = <*>;
foreach my $f( @files ){
unlink "$dir/$f" or do {
printf "\nKann Datei %s, %d nicht löschen: $!\n", $f, unpack "C", $f;
next;
};
}
MfG