Paul: Eintrag in Datei über anderen & Zeilenumbrüche

Hallo!

Ich bin noch ein ziemlicher Anfänger in Perl und hab ein kleines Script geschrieben, das Formulardaten in eine Datei schreibt. Ich möchte es als News-Script verwenden, wobei der neuste Eintrag oben stehen soll. Nur leider werden die Einträge halt untereinander geschrieben.

1. Frage: Wie mache ich es, dass der neuste Eintrag über die anderen geschrieben wird? (Ich habe schon mehrere Methoden durchprobiert, die aber alle erfolglos waren. Wäre sehr dankbar, wenn mir jemand eine wirklich funktionierende vorschlagen könnte.)
2. Frage: Wie mache ich es, dass die Zeilenumbrüche aus dem Formularfeld übernommen werden? (In der Datei sind sie zwar vorhanden, aber der Inhalt wird einfach hintereinander ausgegeben.)

Und hier das Script:

#!/usr/bin/perl

use CGI qw(:standard);
use POSIX qw(strftime);

$date = strftime("[ %d.%m.%Y - %H:%M ]", localtime);

my ($x1);
$x1 = param('news');

open(NEWS, ">>news.htm");
flock(NEWS, LOCK_EX);
print NEWS "<fieldset><legend>$date</legend>$x1</fieldset>\n";
flock(NEWS, LOCK_UN);
close(NEWS);

Vielen Dank für Hilfe!
Paul

  1. hi,

    setzte vor jeden eintrag immer ein bestimmtes zeichen.

    my $x1 = $q->param('news');
    my $news = "°°\n$x1";

    my $newnews;

    open(FH, "<news") or die $!;
    while(<FH>) {
    s/°°/$news/g;
    $news .= $_;
    }
    close(FH);

    open(FH, ">news") or die $!;
    print FH $news;
    close(FH);

    ich habe es nicht getestet, vielleicht sind ein paar fehler drin.

  2. hi,

    1. Frage: Wie mache ich es, dass der neuste Eintrag über die anderen geschrieben wird?

    so, wie es hier schon mehrmals empfohlen wurde:

    erst alle bisherigen inhalte auslesen und in einer variablen zwischenspeichern, und dann die datei im überschreibe-modus öffnen, den neuen eintrag reinschreiben, und die alten hinterher.

    1. Frage: Wie mache ich es, dass die Zeilenumbrüche aus dem Formularfeld übernommen werden? (In der Datei sind sie zwar vorhanden, aber der Inhalt wird einfach hintereinander ausgegeben.)

    die zeilenumbrüche _werden_ idR wieder ausgegeben - aber ein zeilenumbruch in html wird zu einem space zusammengeschrumpft.
    du erinnerst dich dunkel, dass man zeilenumbrüche in html mit <br> bzw. <br /> macht?
    also lasse die zeilenumbrüche bei der ausgabe durch <br> ersetzen/erweitern.
    in php geht dies mit der funktion nl2br() - perl bietet bestimmt ähnliches an.

    gruss,
    wahsaga