PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cgi: Undefined subroutine



damogran
04-06-2004, 07:06
hossa

ich spiele (zumindest versuche ich es ^^) zur zeit ein bichen mit cgi rum. jedoch scheitere ich schon ziehmlich früh bei den einfachsten sachen

mein script:

-- CUT HERE --
#!/usr/bin/perl -Tw

use strict;
use CGI qw/:html3/;
use CGI::Carp qw(fatalsToBrowser);

print header;
print start_html('hello world');
print end_html;
-- CUT HERE --

mein fehler:

Software error:

Undefined subroutine &main::start_html called at test.cgi line 10.

jemand eine idee was das ist ?

mfg
damogran

fork
04-06-2004, 12:29
Schreib' das mal lieber so...

use CGI qw/:html3 :standard/;

damogran
07-06-2004, 08:15
thx ... jetzt funktioniert es ... komische sache .. ist das normal? in keine der dokus die ich gelesen habe stand davon was drin (z.b. perl in 21 tagen)

ich hab allerdings schon das nächste problem :)

sobald ich eine Variable einfügen will...

LINE13: $test = "just a simple test";
LINE25: print "$test"

bekomme ich folgende fehler

Global symbol "$test" requires explicit package name at test.cgi line 13.
Global symbol "$test" requires explicit package name at test.cgi line 25.
Execution of test.cgi aborted due to compilation errors.

dieses cgi bringt mich noch ins grab :)

damogran
07-06-2004, 09:33
aha .. ...

habe gerade gelesen das das durch "use strict;" ausgelöst wird

mh... naja jetzt gehts

fork
07-06-2004, 21:56
use strict;
use warnings;
use diagnostics;
Diese drei Zeilen sollten in keinem Script über 30 Zeilen fehlen. Sie helfen Fehler zu vermeiden und zu beheben.

use strict erfordert u. a. eine Variablendeklaration(mit my). Solltest Du also mal eine Variable falsch schreiben bekommst Du das sofort mitgeteilt. Wenn Du's weglaesst nimmt das Programm eine neue leere Variable an. Da kann schon einige Zeit draufgehen bis der Fehler dann ans Tageslicht kommt. Also schreibe statt
$test = "just a simple test"; einfach
my $test = "just a simple test"; Bei groesseren Projekten ist es besser Variablen am Anfang der Subroutine/des Programms mit my zu deklarieren und gleich auch zu kommentieren.

Warnings warnt vor schlechtem Programmierstil und diagnostics gibt ausführliche Hilfen zu Warnungen und Fehlern.

> use CGI qw/:html3 :standard/;
> use ist das normal?

Nein das ist eben nicht normal. Denn wenn Du da nix angiebst wird das normale genommen(:standard). Wenn Du aber was angiebst(:html3) musst du alles genau angeben.(Ich hab' mir das jetzt mal aus den Fingern gesogen und hoff' dasses stimmt.)

damogran
08-06-2004, 08:26
gute erklärung .. danke :)