Christoph Schnauß: for oder foreach ?

Beitrag lesen

n'abends ;-)

zu Testzwecken hab ich mal folgendes file zusammengeschustert:

==========

#! D:/Perl/bin/perl.exe

$basedir = "E:/experimental/temp";

$openfile = "test0.htm";
$newfile = "test1.htm";

open(ORIGINAL,"$basedir/$openfile") || die $!;
@datei = <ORIGINAL>;
close(ORIGINAL);

sub auslesen {
   print "Content-type: text/html\n\n";
   foreach $zeile (@datei) {
   print "$zeile";
   }
}

sub erstellen {
   open(NEU,">$basedir/$newfile") || die $!;
   foreach $zeile (@datei) {
   print NEU "$zeile";
   }
   close(NEU);
}

&auslesen;
&erstellen;

ok, is schon klar, das läuft auf einer Windows-Kiste (läuft aber mit anderer shebang und angepaßten Pfaden auch mit der SUSE LINUX und mit *BSD), der lokale Webserver ist - natürlich  -  Apache.

Bisher macht das Ding nix anderes als eine bereits bestehende Datei "test0.htm" schlichtweg zu kopieren und als neue Datei "test1.htm" gleichzeitig anzuzeigen und im Hintergrund auf dem Server abzulegen. Es soll letzten Endes dazu ausgebaut werden, daß ich für beliebige HTML-Dokumente Korrekturfunktionen automatisieren kann.

Das Problem ist für mich der Array, in den der Inhalt der bereits bestehenden Datei gepackt wird. Die Zeile
   foreach $zeile (@datei)
funktioniert auch in der Form
   for $zeile (@datei)
und jetzt bin ich verunsichert, was ich einsetzen soll: "for" oder "foreach" ?

Wenn ich "foreach" nehme, kann ich zum Beispiel so vorgehen:
   foreach $zeile (@datei){
     if($zeile =~ /<body>/) {
      ...
     }
   }
womit ein ganz bestimmtes HTML-Element gegebenenfalls neu formatiert würde ... vorausgesetzt, es ist in der Originaldatei genauso vorhanden wie ich es hier in der Form <body> erwarte

Wenn ich "for" nehme, könnte ich die HTML-Elemente durchzählen und festlegen, daß z.B. immer das elfte eben <body> heißen soll...

Sind diese beiden Annahmen richtig ?

Beides sind für mich "Sicherheitsrisiken". Hintergrund: Für eine Adresse, auf die mehrere Leute Zugriff haben und HTML-Dokumente hochladen können (die ich nicht kenne), möchte ich mit einem "Korrekturscript" sicherstellen, daß diese Dateien automatisch W3C-konform neu geschrieben werden, ohne daß ich das jedesmal "von Hand" machen muß.

Außerdem: spielt die Reihenfolge, in der ich die einzelnen Zeilen meines Perl-Scripts notierte, eine Rolle (ich meine damit nicht, daß die shebang als erste Zeile stehen muß) ?

Grüße aus Berlin

Christoph S.