Cheatah: Variablen-Vorbelegung nicht nachzuvollziehen.

Beitrag lesen

Hi,

Web-Server ist Apache/1.3.6 (Unix) mit mod_perl. Letztens bekam ich die Antwort, daß ich unsauber programmiert habe.

von mir, stimmt's? ;-)
Dann hab ich Dich sicher auch auf http://perl.apache.org/ hingewiesen. Dort steht, was Du beachten mußt.

Bin Perl-Anfänger und habe leider nichts verdächtiges gefunden.

Dann will ich mal sehen, ob ich etwas verdächtiges finde:

#!/usr/bin/perl

Aha.

#!/usr/bin/perl -w
use strict;

Dann findet Perl nämlich die verdächtigen Dinge für Dich.

require "cgi-lib.pl";

Das ist (hoffnungslos) veraltet.

use CGI ':standard'; # und Script natürlich darauf anpassen

@Zeilen = ("");

my @Zeilen; # es empfiehlt sich btw., kleine Variablennamen zu verwenden, also @zeilen. Nicht weil es syntaktisch besser wäre oder so, sondern es hat sich einfach eingebürgert. Macht Quelltexte lesbarer.

#Seitenkopf ausgeben

print header;

...

Was immer diese drei Punkte symbolisieren, wirst Du vermutlich in einem
print start_html;
Konstrukt durchführen. Siehe perldoc CGI.

if (open(INPUT, "<../files/".$in{'1'}.$in{'2'}.".txt")) {

open INPUT, '/absolute/path/to/files/'.param('1').param('2').'.txt' or die "Kann Datei nicht oeffnen: $!";

»»  while(<INPUT>) {

push(@Zeilen,$_);

»»  }

@Zeilen = <INPUT>;

»»  close(INPUT);

Die Zeile bleibt :-)

if(open(OUTPUT,">../files/blk".$in{'1'}.$in{'2'}.".txt")==false) {

blk? So wie "block"? Ich glaube, Du möchtest

perldoc -f flock
perldoc perlopentut

lesen. Das open-Konstrukt bitte wie oben.

»»  print OUTPUT "<p >$in{'NAME'} (<a href="mailto:$in{'eMail'}">$in{'eMail'}</a>) schrieb

$in{...} jeweils durch param(...) ersetzen.

»»  for(@Zeilen) { print OUTPUT "$_\n" }

Moment, @Zeilen hast Du doch gerade aus einer Datei gelesen, oder? Tja, dann verdoppelst Du gerade die Zahl der Newlines :-)

»»  close(OUTPUT);

close OUTPUT or die "Kann Datei nicht schliessen: $!"; # bei Schreibzugriffen immer!

»»  print "<div align="center">\n";
»»  print "</div>\n";

Naja, nicht alles muß man mit CGI.pm ausgeben. Könnte man aber :-)

print "</body></html>\n";

print end_html;

Tja, also, pauschal betrachtet... Gut, ich habe früher auch solche (und schlimmere) Scripts geschrieben, aber glaube mir - heute ärgere ich mich, wenn ich mal eins warten möchte :-)

Cheatah