Die Arrays werden nicht interpretiert
Andre Gamerschlag - OneOfEleven
- perl
Wenn man eine Variable einliest und diese in Anführungszeichen wieder ausgibt, so soll ja der Variableninhalt interpretiert werden.
Also im unteren Script geht es darum. Drei dateien Auszulesen und sie dann als HTML auszugeben. Die drei Dateien enthalten also HTML Code.
So, $path gibt den Pfad von cgi-bin zum htdocs Ordner an (dabei sollte man wissen, dass sich im root Ordner der htdocs und der cgi-bin Ordner befindet und nicht wie übliche, der root Ordner, der htdocs Ordner ist und den cgi-bin Ordner beihnaltet [was das zu kompliziert ausgedürck ?]) JOJO
Also die Variable $file sollte für sich sprechen.
Also es werden drei Dateien ausgelesen. In diesen Dateien sind auch Variablen gespeichert. Und zwar wird die Variable $path verwendet, um den Pfad der Bilder anzugeben, die in dieser Datei vorkommen.
Na jedenfalls geben ich die Variablen in "-Zeichen aus und die anstatt den Variablenwert einzusetzen, wird nur der Variablenname ausgegeben. Wie kommt das ?
Hier ist das Script:
#!/usr/bin/perl
$path = "c:/xitami/htdocs/";
$file = $ENV{QUERY_STRING};
open (EINLESEN, "<$path/$file.dat");
@content = <EINLESEN>;
close (EINLESEN);
open (LIES_TOP, "<top.txt");
@top = <LIES_TOP>;
close (LIES_TOP);
open (LIES_BOTTOM, "<bottom.txt");
@bottom = <LIES_BOTTOM>;
close (LIES_TOP);
print "Content-type: text/html\n\n";
print "@top";
print "@content";
print "@bottom";
Hallo Andre
Na jedenfalls geben ich die Variablen in "-Zeichen aus und die anstatt den Variablenwert einzusetzen, wird nur der Variablenname ausgegeben. Wie kommt das ?
Schmeiss mal den oberen Teil raus:
$path = "c:/xitami/htdocs/";
$file = $ENV{QUERY_STRING};
open (EINLESEN, "<$path/$file.dat");
@content = <EINLESEN>;
close (EINLESEN);
Da wird meines Erachtens beim Erzeugen des Pfadnamens fuer die Datei ein Fehler erzeugt, naemlich so was wie c:/xitami/htdocs//irgendwas.dat. Ausserdem sollte die Umgebungsvariable mit $ENV{'QUERY_STRING'} angesprochen werden (Hochkommas beachten!).
Ansonsten sollte es so funktionieren, vorausgesetzt der Dateipfad stimmt:
#!/usr/bin/perl
$top = "c:/xitami/htdocs/top.txt";
open(TOP,"<$top");
@Zeilen = <TOP>;
close(TOP);
print "Content-type: text/html\n\n";
print "@Zeilen";
viele Gruesse
Stefan Muenz
Hallo Andre, Stefan,
Hallo Andre
Na jedenfalls geben ich die Variablen in "-Zeichen aus und die anstatt den Variablenwert einzusetzen, wird nur der Variablenname ausgegeben. Wie kommt das ?
Schmeiss mal den oberen Teil raus:
$path = "c:/xitami/htdocs/";
$file = $ENV{QUERY_STRING};
open (EINLESEN, "<$path/$file.dat");
@content = <EINLESEN>;
close (EINLESEN);Da wird meines Erachtens beim Erzeugen des Pfadnamens fuer die Datei ein Fehler erzeugt, naemlich so was wie c:/xitami/htdocs//irgendwas.dat.
stimmt !
Ansonsten sollte es so funktionieren, vorausgesetzt der Dateipfad stimmt:
#!/usr/bin/perl
$top = "c:/xitami/htdocs/top.txt";
open(TOP,"<$top");
und deshalb sollte man _immer_ den Rückgabewert prüfen:
open(TOP,"<$top") or die "kann $top nicht öffnen $!";
und man wird automatisch auf den Fehler hingewiesen.
[...code...]
viele Gruesse
Stefan Muenz
Gruß
Kai
Tag auch!
So, $path gibt den Pfad von cgi-bin zum htdocs Ordner an (dabei sollte man wissen, dass sich im root Ordner der htdocs und der cgi-bin Ordner befindet und nicht wie übliche, der root Ordner, der htdocs Ordner ist und den cgi-bin Ordner beihnaltet [was das zu kompliziert ausgedürck ?]) JOJO
Wolltest Du sagen, dass Du die Directories c:/xitami/htdocs/root/ und c:/xitami/htdocs/cgi-bin/ hast? ;-)
Also es werden drei Dateien ausgelesen. In diesen Dateien sind auch Variablen gespeichert. Und zwar wird die Variable $path verwendet, um den Pfad der Bilder anzugeben, die in dieser Datei vorkommen.
Na jedenfalls geben ich die Variablen in "-Zeichen aus und die anstatt den Variablenwert einzusetzen, wird nur der Variablenname ausgegeben. Wie kommt das ?
Du meinst, im Inhalt der Datei gibt es Stellen, die wie z.B. <A HREF="$root/laberblubb..."> aussehen, es wird aber ganz genau das ausgegeben, was in den Dateien steht? Dann liegt da wohl ein Missverstaendnis vor. Denn die Variablen in Anfuehrungszeichen werden schon ganz richtig aufgeloest. Nur handelt es sich dabei nicht um das $path in der Datei, sondern um die Variablen @top, @content und @bottom. Wuerden sie nicht aufgeloest werden, wuerdest Du tatsaechlich nur diese 19 Zeichen @top@content@bottom bekommen. Aber da sie ganz richtig aufgeloest werden, wird eben der Inhalt dieser Variablen ausgegeben. Aber nicht rekursiv bis der Arzt kommt, sondern nur genau ein mal.
Offensichtlich willst Du einfach ein paar Templates verwenden und da noch ein paar Variablen einsetzen. Ich mache das gewoehnlich so, dass ich in den Dateien Dinge wie <A HREF="<%% ROOT %%>/laberblubb"> notiere, im Script einen Hash mit all den verfuegbaren Daten anlege:
%TemplateData = (
'PATH' => 'c:/xitami/htdocs/',
'ROOT' => 'http://localhost/'
);
und dann auf den eingelesenen Dateiinhalt mit einem Ausdruck wie diesem losgehe:
for (@template) {
s/<%%\s*(\S+?)\s*%%>/$TemplateData{uc($1)}/g;
}
#!/usr/bin/perl
$path = "c:/xitami/htdocs/";
$file = $ENV{QUERY_STRING};
So long