迪拉斯: Mein erstes Skript

Beitrag lesen

ich keine bösen User habe.

Unachtsamkeit kann auch Schaden anrichten, dazu bedarf es keiner Bosartigkeit.

Bleibe bei der Dispatchtabelle. Du kannst trotzdem dynamisch programmieren. Mein Beispielcode sollte nur das Prinzip veranschaulichen und nicht andeuten, dass die erlaubten Werte fest einprogrammiert sein sollen.
Lese zuerst die Dateinamen aus dem WebDAV-Verzeichnis in den Hash als Werte. Die dazugehörigen Schlüssel erzeugst du durch einen Normalisierungsprozess, im einfachsten Fall durch 1:1-Abbildung. Lass dir was schlaueres einfallen. (Alle Leser: Vorschläge?)
Der Hash ist die Whitelist. Wie schon im letzten Posting gesagt, wenn ein Schlüssel kommt, den es nicht gibt, einfach abweisen.

wenn ich jedoch use encoding 'utf8' entferne, dann kommt mein Inhalt beim Browser nicht mehr als UTF-8 an.

Ah, du hast das grundlegende Problem doch schon erkannt, Daten müssen vor der Ausgabe kodiert werden. Leider benutzt du ein unbrauchbares Mittel dafür. Mein Artikel http://forum.de.selfhtml.org/archiv/2006/7/t133539/#m866028 bietet andere, generalisierte Ansätze, von denen auch einige in eine Zeile passen. Entferne das Pragma und sattle auf eins von denen um.

Benutze die Dreiargumenteform der open-Funktion. Benutze lexikalische Filehandles.
Macht man das weil der Code konsistener ($ für alle Variablen) wird oder hat das noch andere Gründe?

Du hast keinen Modus gewählt, deshalb wurde das Filehandle defaultmäßig zum Schreiben/Lesen geöffnet. Stell dir vor, du hättest das FH in eine Sub gegeben, die nicht von dir stammt, und der fremde Code schreibt munter in die Datei, obwohl du bloß lesen wolltest. Die Dreiargumenteform zwingt dich, über den Zugriffsmodus nachzudenken. Schreibzugriffe auf eine zum nur-Lesen geöffnete Datei schlagen fehl.

Herkömliche FH vom Globtyp Filehandle, deren Bezeichner typischerweise aus Konvention großgeschrieben werden, bleiben bis zum Ende des Programms bestehen und verschmutzen den Namensraum. Und wie jeder weiß, sind globale Bezeichner pfuibähbäh. Skalare als FH hingegen lassen sich im Gültigkeitsbereich einschränken. Variablen sollten aus dem Namensraum entfernt werden, wenn sie nicht mehr gebraucht werden. So vermeidet man eine weitere Quelle an Programmierfehlern. Typisches Beispiel:

  
my @inhalt;  
{ # nackter Block erzeugt neuen G'bereich  
 open my $fh, '<', 'foo' or die;  
 @inhalt = (<$fh>);  
 close $fh;  
};  
# $fh ist ab hier nicht mehr gültig und kann erneut verwendet werden  

Ich habe nicht immer UTF-8-codierte Dateien, will diese jedoch immer als UTF-8 ausgeben.

Die Dekodierung ist sowieso fällig, seien die ankommenden Datei UTF-8 oder Latin-9 oder sonstwas. Es ist falsch, anzunehmen, es ist UTF-8, und wenn nicht, normaler Plaintext, eben weil es keinen Plaintext gibt. Ersetze dein Konstrukt, welches nicht alle Fälle abdeckt, also durch Encode::decode() oder andere Lösung aus verlinktem Archivartikel.
Der Haken an der Geschichte ist nun besser sichtbar, dass du wissen musst, in welcher Kodierung die Datei vorliegt. Sorge also dafür, dass irgendwie Metadaten für jede Datei vorliegen. Falls das nicht geht (das Leben ist bekanntlich fiese und gemein), setze eine Heuristik ein. http://forum.de.selfhtml.org/archiv/2006/9/t136083/#m883628
Am besten verlagerst du diese Problematik nach außerhalb deines Programms. Setze vorraus, dass dein Programm nur UTF-8-kodierte Dateien zu essen bekommt. Konvertiere Fremdformate vorher.

--
水-金-地-火-木-土-天-海-冥