Fragen zu Perl/CGI -> Header bei Scripten

S

s0yl3nt-bl4ck

Mitglied
Thread Starter
Dabei seit
09.04.2007
Beiträge
47
Reaktionspunkte
0
Hi,

nachdem ich nun nach Tagen von rumgefummel endlich Perl zum laufen bekommen habe (man siehe meinen Thread im Mac OS X Server Bereiche) habe ich mal ein paar Verständnisfragen, was eben Perl/CGI betrifft.

Ich hoffe mir kann da jemand verständlich was zu erklären.

Sobald ich ein Script speichere, gibt es bei mir mehrere Möglichkeiten.

Ich kann ein Script

- rein mit dem Namen ohne Endung Speichern (z.B. "hallo1")

- mit der CGI Endung speichern (hallo1.cgi)

- als Perl Datei speichern (hallo1.pl)

Nun die Frage: Wie sehen die Unterschiede da genau aus??

Ums mal zu verdeutlichen:

Ich habe ein kleines Testscript hier:

Code:
#!/usr/bin/perl -w

use CGI;	
use CGI::Carp qw(fatalsToBrowser);
$cgi = new CGI;

print $cgi->header('text/plain');

#Meine Anweisungen 

$fred = 17;
$blubb = "Toast";

print "Ich habe heute $fred $blubb gegessen!\n";


Ausgabe im Browser ist dann:

Code:
Ich habe heute 17 Toast gegessen!

Kommentiere ich nun den Header aus, also den Teil hier:

Code:
use CGI;	
use CGI::Carp qw(fatalsToBrowser);
$cgi = new CGI;

print $cgi->header('text/plain');

gibts nen Fehler, "Internal Server Error", egal ob ich das Script als .cgi, .pl oder ohne Endung speichere.

Warum nun muss ich den Header auch bei Scripten mit .pl Endung anwenden, wenns sich garnicht um eine CGI Datei handelt??

Und welche Endungen sollte man generell benutzen? Sollte man sich auf eine Art festlegen?

Soweit ich weiss, ist CGI ja eher für interaktive Sachen in Web Seiten gedacht. Wenn ich also ein Perl Script tippe, das nur auf meinem Rechner einige Aktionen ausführen soll ohne irgendwelche Interaktion mit Web Sachen, dann brauche ich doch kein CGI, oder ??

Könnte mir das mal jemand erklären, wo genau nun die Unterschiede liegen?

Ich lese nämlich auf zig Seiten und in zig Büchern ständig unterschiedliche Definitionen. Mal heisst es, man sollte IMMER .cgi als Endung nehmen, woander heisst es, man braucht gar keine Endungen für seine Scripte (wie z.B im LAMA Perlbuch) etc.


Danke


Gruss
 
Habe was vergessen, noch ne Frage:

Wie siehts aus mit Perl Scripten, die ich in der Bash ausführen will?

Die Bash interpretiert doch gar keine Anweisungen, wie sie ein Browser braucht für die korrekte Anzeige, oder ist das anders?

Was würdet Ihr eigentlich empfehlen??

Scripte die erstmal nichts mit Weboberflächen o.Ä. zu tun haben, in der Bash aufrufen oder im Browser? Macht ja wohl keinen Sinn, das mit dem Browser zu machen, oder?

Wenn ich da mal vergleiche:

ich habe gerade ne Eingabeaufforderung aus der Tastatur mit eingebaut mit

Code:
<STDIN>

und das Ganze ner Variablen zugewiesen, die dann in ner if - else Abfrage eine jeweilige print Anweisung enthält.

Dazu braucht man dann, wenn mans nicht in der Bash ausführt, doch erstmal ein geeignetes HTML Formular mit Eingabefeldern die dann wieder zugewiesen werden müsen.

Also kurzum: Bash die Standardumgebung für Perl Scripte???
 
Alle Skripte, die die CGI-Schnittstelle verwenden, müssen auch einen Header schicken.

Es ist egal, ob Du die Datei *.pl oder *.cgi nennst. Du wirst irgendwo in der Webserver-Konfig stehen haben, dass diese Dateien als CGI-Skript ausgeführt werden sollen ("AddHander cgi-script .pl .cgi" oder so ähnlich).

Es kommt in den Skripten auf die erste Zeile ("Shebang") an. Dort wird angegeben, mit was das Skript ausgeführt werden sollt ("#!/usr/bin/perl"). Deswegen ist es egal, ob Du .cgi, .pl oder etwas anderes nimmst. Du kannst rein theoretisch auch .asp oder so nehmen. Man hat sich nur irgendwann mal angewöhnt, .cgi für CGI-Skripte zu nehmen, um eben zu verdeutlichen, dass man einige Sachen beachten sollte (wie eben den Header mitzuschicken). .pl wird mittlerweile für mod_perl verwendet. Das ist alles kein Muss, aber man hat sich das mal so angewöhnt für die Übersichtlichkeit.

In der Bash musst Du Formatierungen (Listen, "Tabellen",...) anders erstellen als für den Browser, da Du nicht diese Tags zur Verfügung hast.

Wenn Du die Skripte nicht "von außen" erreichbar machen willst, macht es eigentlich keinen Sinn, diese über den Browser aufzurufen. Das kostet nur Zeit und Speicher, weil ja eine zusätzliche Instanz im Spiel ist (der Webserver).
 
Hi,

vielen Dank für die Erklärungen. Das hilft mir auf jeden Fall weiter!!

Also brauche ich ja auch garnicht den Apache starten, wenn ich Perl Scripte lokal bei mir in der Bash ausführe. Sehe ich ja daran, dass Perl die Scripte abarbeitet in der Bash wenn der Server nicht an ist.

Gruss
 
Zurück
Oben Unten