Hallo,
for ($i=0;$i<=$SIZE;$i++) {
Das ist C-like, aber kein Perl ;) Besser ist:
Aber da Perl eine Sprache mit vielen Möglichkeiten ist, spricht auch gegen diese Variante nichts Bedeutendes;-)
(Ich mache es aber heute auch anders, außer wenn ich beispielsweise in zwei Arrays gleichzeitig arbeite oder es sonst irgendwie mehr Sinn ergibt.)
Nun aber zum eigentlichen Problem von azrael, wobei ich einige Vereinfachungen vorgenommen habe, um die Struktur klarer werden zu lassen. Es fehlen z.B. die ganzen my's und flock's.
Die Doku von open ist ja mehrfach zitiert worden, aber trotzdem nochmals in Kürze. mit ">$outfile" wird die Datei vollkommen neu geschrieben, während ">>$outfile" dafür sorgt, daß am Ende der Datei angefügt wird. Da Du aber irgendwo in der Datei etwas einfügen willst, mußt Du zwangsläufig die ganze Datei neu schreiben.
Anscheinend willst Du _nach_ der ersten Zeile, welche "<!--begin-->" _enthält_ einfügen.[1]
Jetzt hast Du zwei Möglichkeiten, entweder Du fügst bereits beim Lesen ein, oder aber erst beim Schreiben:
1.)
open(IN,$outfile) or die "aufmochn get nix";
while(<IN>)
{
push @lines,$_;
push @lines,$eintrag if /<!--begin-->/;
}
close IN;
open(OUT,">$outfile");
print OUT,@lines;
close OUT;
2.)
open(IN,$outfile) or die "aufmochn get nix";
@lines = <IN>;
close IN;
open(OUT,">$outfile");
foreach (@lines)
{
print;
print $eintrag if /<!--begin-->/;
}
close OUT;
Welche der beiden Varianten gewählt wird, ist eigentlich egal. Die erstere braucht geringfügig mehr Speicher, solange der neue Eintrag nicht riesig ist, hat aber den Vorteil, daß die Daten eventuell bereits für eine Weiterbearbeitung dem neuen Dateiinhalt entspricht, und daher auch keine Sonderbehandlung für die eventuelle Ausgabe zum Client nötig ist.
Natürlich kann das alles auch anders geschrieben werden, aber ich denke so ist es durchaus auch perlish:-)
Grüße
Klaus
[1] Das bedeutet aber nicht, daß in dieser Zeile nur "<!--begin-->" steht, aber das wäre jetzt Haarspalterei, ich möchte nur darauf hingewiesen haben.