Schrift
[thread]7664[/thread]

Konstanten?

Leser: 3


<< >> 9 Einträge, 1 Seite
pug
 2006-01-30 15:04
#62449 #62449
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ich versuche mich gerade mit HTML-Template und dann hakt es schon an so einer einfachen Konstante. Ich habe das eingegeben:
Code: (dl )
use constant TMPL_FILE => "$ENV{DOCUMENT_ROOT}/db/templates/startseite.tmpl";

und bekomme schon eine Fehlermeldung:
Quote
Use of uninitialized value in concatenation (.) or string at ./startseite.cgi line 11
.
Also ich kann es auch anders machen, und mache es auch erst mal ohne Konstante sondern mit einem einfachen String, aber ich frage mich doch, WISO geht das nicht? Habe ich etwas übersehen?

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
Taulmarill
 2006-01-30 15:17
#62450 #62450
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hat $ENV{DOCUMENT_ROOT} zu dem zeitpunkt, zu dem du es aufrufst, einen wert? evtl. mit if ( defined $ENV{DOCUMENT_ROOT} ) { ... abfangen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pq
 2006-01-30 15:33
#62451 #62451
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
use constant wird schon zur compile-time aufgerufen, deswegen wird ein
if drumherum nix bringen. entweder $ENV{DOCUMENT_ROOT} wird schon
beim scriptaufruf gesetzt oder mittels eines BEGIN-blocks.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pug
 2006-01-30 15:37
#62452 #62452
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Nee, ich denke, das ist doch erst mal einfach ein String. Was dann im Programmablauf damit gemacht wird, ist dann was anderes.
Es ist ja so, daß der Parser meines Editors schon meckert daß es kein gültiger Ausdruck wäre.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
svenXY
 2006-01-30 15:47
#62453 #62453
User since
2005-09-15
33 Artikel
BenutzerIn
[default_avatar]
Hi, also das muss irgendwas anderes bei Dir schräg sein. Bei mir funktioniert Folgendes wunderbar:

Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w
##
## printenv -- demo CGI program which just prints its environment
##
use constant doc1 => "$ENV{'DOCUMENT_ROOT'}/bla/bla/bla";
use constant doc2 => "$ENV{DOCUMENT_ROOT}/bla/bla";
print "Content-type: text/html\n\n";
print "doc1:", doc1, "<br>doc2: ", doc2, "<br>\n";
...

ergibt nämlich (wie gewünscht):
Code: (dl )
1
2
doc1:/var/www/html/bla/bla/bla
doc2: /var/www/html/bla/bla


Hast Du denn überhaupt Zugriff auf die Apache Variablen?

Gruss,
Sven\n\n

<!--EDIT|svenXY|1138629042-->
pq
 2006-01-30 16:13
#62454 #62454
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=pug,30.01.2006, 14:37]Nee, ich denke, das ist doch erst mal einfach ein String.[/quote]
hm? was meinst du damit? was ist ein string?
Quote
Was dann im Programmablauf damit gemacht wird, ist dann was anderes.

verstehe dich immer noch nicht.
Quote
Es ist ja so, daß der Parser meines Editors schon meckert daß es kein gültiger Ausdruck wäre.

das ist dann allerdings ein problem deines editors, denn die syntax ist
in ordnung. das programm läuft ja auch, du bekommst nur die warnung,
die du zitiert hast. wie kommst du drauf, dass ein programm mit einem
für perl ungültigen ausdruck überhaupt ausgeführt wird?

die frage ist nach wie vor, woher kommt die umgebungsvariable?
wenn sie schon beim script-start gesetzt ist, also von außen kommt,
sollte der fehler nicht auftreten.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pug
 2006-01-30 16:27
#62455 #62455
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ja, das hat mich gewundert. Ich dachte "$ENV{DOCUMENT_ROOT}/db/templates/startseite.tmpl" wäre einfach nur ein String, aber er versucht das wirklich aufzulösen.
Aber selbst wenn ich das als /root aufrufe, kann er diesen String nicht auflösen. Hmmmm
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
pq
 2006-01-30 16:54
#62456 #62456
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=pq,30.01.2006, 15:13]die frage ist nach wie vor, woher kommt die umgebungsvariable?
wenn sie schon beim script-start gesetzt ist, also von außen kommt,
sollte der fehler nicht auftreten.[/quote]
also einfacher: wie rufst du das skript auf? ist die umgebungsvariable
schon vor deinem aufruf gesetzt und exportiert?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pug
 2006-01-30 17:13
#62457 #62457
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
OK, vergessen wirs (schähm) das Problem ist keines. Ich habe die Konstante wieder in das Skript eingefügt und in das cgi-Verzeichnis kopiert.
Code: (dl )
1
2
3
4
5
6
use constant TMPL_FILE => "$ENV{DOCUMENT_ROOT}/db/templates/startseite.tmpl";

my $q = new CGI;

my $tmpl = new HTML::Template ( filename => TMPL_FILE,
associate => $q );


Hier wurde es von Apache aufgerufen und es ging! Naja es ist ja Montag.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
<< >> 9 Einträge, 1 Seite



View all threads created 2006-01-30 15:04.