andrea: Schreiben (bzw. Öffnen) von 2 Dateien innerhalb einer Funktion? - Perl

Beitrag lesen

Hallo Klaus,

Danke für den Schnellkurs!!!

Hab grad erst angefangen mit perl und versuche anhand von
bereits bestehenden Scripten zu erkennen, was wie läuft.

Anscheinend hab ich mir nicht grade die optimale Vorlage
dazu ausgesucht...

Auf jeden Fall danke für die Tips.
Ich werd Deine Vorschläge alle einbauen!

Muß noch viel lernen!

andrea

Hallo,

sub modcourtesy {

open (COURTESY, "courtesy.db");
@courtesy = <COURTESY>;
close(COURTESY);
$courtesyline = ($courtesy[0]);

Nur die erste Zeile wird berücksichtigt. Ist das gewollt?

warum dann nicht:

open (COURTESY, "courtesy.db");
$courtesyline  = <COURTESY>;
close COURTESY;

chomp($courtesyline);
($coursender,$coursubject,$courfields) = split(//, $courtesyline);

...

open (COURTEXT, "courtext.txt");
while (<COURTEXT>) {
»»  $_ =~ s/</<;/ig;
»»  $_ =~ s/>/>;/ig;
push (@courtext,$_);

Hab's nicht ausprobiert, aber ich schreib immer:

push @courtext, $_;

}
close(COURTEXT);

....

Hier wäre noch interessant, wie Du @courtext wirklich ausgibst, vielleicht auch so wie oben mit " $courtesyline = ($courtesy[0])" ?
Dann wäre es erklärbar.

machst Du da irgendwie
  print '<textarea name="courtext">',@courtext,'</textarea>';
dann wäre alles ok.
wenn da steht
   print '<textarea name="courtext">',$courtext[0],'</textarea>';
oder ähnliches, dann gibts halt nur die erste Zeile.

Übrigens:
Dein anderes Posting, wegen der Leerzeilen.
wenn Diu schreibst
  <textarea>

»»  blablabla

</textarea>

dann wird _alles_ zwischen dem öffnenden und schleißenden Tag als Text genommen, also auch die von dir eingefügten Zeilenumbrüche.
  <textarea>blablabla</textarea>
gibt nur genau den text aus, den Du auhc ausgeben willst.

sub writecourtesy {

&checkpassword;

$writecourtesyline = "$FORM{'coursender'}$FORM{'coursubject'}$FORM{'courfields'}\n";
open (WRITECOURTESY, ">courtesy.db");
print WRITECOURTESY "$writecourtesyline";
close(WRITECOURTESY);

open (COURTESY, "courtesy.db");
@courtesy = <COURTESY>;
close(COURTESY);
$courtesyline = ($courtesy[0]);
chomp($courtesyline);
($coursubject,$courtext) = split(//, $courtesyline);

...

$FORM{'courtext'} =~ s/<;/</g;
$FORM{'courtext'} =~ s/>;/>/g;

@Newcourtext = $FORM{'courtext'};
    ^^^^^^^^^^^^^^^^^
open (WRITECOURTEXT,">courtext.txt");
        foreach $Newcourtext (@Newcourtext) {
                print WRITECOURTEXT "$Newcourtext\n";
        }
close(WRITECOURTEXT);

warum?
Du machst eine Zuweisung von einem Wert auf ein Array.
Dadurch steht max. ein Wert im Array.
dann gibst Du in einer Schleife, die genau einmal durchlaufen wird, diesen Wert aus. Sehr seltsam :-o

warum nicht gleich

open (WRITECOURTEXT,">courtext.txt");
print WRITECOURTEXT $FORM{'courtext'};
close(WRITECOURTEXT);

???

BTW:
Fehler abfangen ist auch oft recht brauchbar. z.B.

open (WRITECOURTEXT,">courtext.txt") or die "nixda mit schreiben auf Datei";

Grüße
   Klaus