Paul: sterben ohne header

Guten Morgen,

eine Frage an alle Perl-Experten:

Warum funktioniert im "Sterbefall" der erste Code-Schnipsel, der zweite aber nicht ?

1):
print "Content-type: text/html\n\n";
$ARGV[0] !~ m/[^\d\w/.&-\_]/ die;
print "still alive";

2):
$ARGV[0] !~ m/[^\d\w/.&-\_]/ die;
print "Content-type: text/html\n\n";
print "still alive";

und was kann ich machen wenn ich die Abfrage ohne Header verwenden möchte/muss.

Dankeschön
Paul

  1. Hallo Paul,

    'die' schreibt keinen Header, weil Perl eigentlich ja zu r Sysadmin entwickelt wurde.

    Vorschlag:

    #!/usr/bin/perl -w

    my($isHeader) = 0; # Flag, um sich zu merken, ob der Header schon ausgegeben wurde

    sub printHeader
    {
    my($mime) = shift;
    if ($isHeader == 0)
       {
       print "Conetent-Type: $mime\n\n";
       $isHeader =  1;
       }
    }

    sub ErrorMsg
    {
    my($message) = shift;
    &printHeader('text/html');
    print "Error : $message\n";  # kann natürlich ausgebaut werden
    exit;
    }

    $ARGV[0] !~ m/[^\d\w/.&-\_]/ ErrorMsg('Fehlerhaftes Argument');
    &printHeader('text/html');
    print 'still alive';

    Vielleicht hilft Dir das weiter

    Klaus

    1. Hallo Klaus

      vielen Dank für dein ausführlich Code-Beispiel, da war der Lösungsansatz für mein Problem drin. Gute Idee mit dem Header-Tag.

      Warum "die" überhaupt eine Header braucht wo‚s doch eigentlich garnix ausgibt ist mit aber immernoch nicht klar.

      Paul

      1. hallo Paul,

        Naja, Webserver un dBrowser sind da immer empfindlich. Wenn ein Browser einen Request abschickt, dann will er irgendwas retour haben. Zumindest des Response-Header.
        Und wenn Dein Script nichts liefert, dann macht halt der Server was. Meist ist das irgendeine Standard-Fehlermeldung.

        So ist das leben.

        Grüße
        Klaus

      2. Hi!

        Warum "die" überhaupt eine Header braucht wo‚s doch eigentlich garnix ausgibt ist mit aber immernoch nicht klar.

        Nicht das die() will irgendwas haben, sondern der Webserver, der Dein Script aufgerufen hat, naemlich einen korrekten CGI-Header-Block. Dieser Header-Block ist eine Anzahl von Zeilen, jede durch \n abgeschlossen, wobei jede Zeile die Form

        Header-name: value

        hat, und das Ende des Blocks wird durch eine leere Zeile signalisiert (deshalb ein weiteres \n). Das nennt man CGI. So ist das Interface definiert, und wenn Du also CGI-Scripts schreiben willst, wirst Du Dich daran halten muessen. Immer!

        Wenn Du mit die() oder exit() oder irgendwas anderem vorzeitig abbrichst, hat sich das Script nicht korrekt verhalten. Das heisst per definition, es ist fehlerhaft, also wird vom Webserver ein 500 Internal Server Error erzeugt. So einfach ist das. Aber mit dem Code von Klaus hast Du ja jetzt was praktikables an der Hand.

        So long