hausbesetzer: CGI.pm Absturz bei Aufruf von header() in Subroutine

Hallo zusammen,

wenn ich in einer Subroutine die Funktion header() des CGI-Moduls aufrufe (teilweise erst nach mehrmaligem Aufruf des Skriptes), stürzt mein Webserver ab (XAMPP 1.7.3 unter WinXP bzw. MacOS 10.5.8).
Wenn ich dagegen die Header-Ausgabe ins "Hauptprogramm" verlagere, funkioniert alles anstandslos.

Woran kann das liegen bzw. was mache ich falsch?

Viele Grüße
Florian

  
#!/usr/bin/perl -T  
  
use strict;  
use warnings;  
use CGI;  
use CGI::Carp qw/fatalsToBrowser/;  
use File::Basename;  
  
  
my $query = CGI->new;  
#print $query->header(-type => 'text/html');  
Anzeige ("Dies ist ein Testtext!<br />");  
  
sub Anzeige {  
print $query->header(-type => 'text/html');  
print $query->start_html(-title=>'Abgestuerzt?!');  
print shift;  
print $query->end_html;  
}  

  1. Hallo

    my $query = CGI->new;

    Meine Perl Kenntnisse sind jetzt nicht die besten, aber $query ist doch durch my als Locale Varibale definiert und damit _nicht_ in der Subroutine bekannt oder irre ich mich da?

    Ein
    our query = CGI->new;
    wäre wohl besser, obwohl ich trotzdem nicht weiß wieso der Webserver dann abstürzt.

    1. my $query = CGI->new;

      Meine Perl Kenntnisse sind jetzt nicht die besten, aber $query ist doch durch my als Locale Varibale definiert und damit _nicht_ in der Subroutine bekannt oder irre ich mich da?

      Ja du irrst. Da es im Hauptblock definiert wurde, ist es in der Datei global.

      Struppi.

  2. wenn ich in einer Subroutine die Funktion header() des CGI-Moduls aufrufe (teilweise erst nach mehrmaligem Aufruf des Skriptes), stürzt mein Webserver ab (XAMPP 1.7.3 unter WinXP bzw. MacOS 10.5.8).

    Wirklich ein Absturz?

    Woran kann das liegen bzw. was mache ich falsch?

    Wenn ich das Skript unter WinXP testet, beschwert sich Perl über das -T:

    
    >perl t.pl  
    
    "-T" is on the #! line, it must also be used on the command line at t.pl line 1.  
    
    

    Probier's mal ohne -T.

    Struppi.

    1. Danke schon mal für die Antworten!
      Habe es eben ohne -T versucht, gleiches Resultat.
      Nach ca. dreimaligem Aufruf des Skripts im Browser bekomme ich die Meldung "Apache HTTP Server hat ein Problem festgestellt und muss beendet werden.."
      Das gleiche passiert bei einem Skript aus der Perl-Doku von Selfhtml.
      http://de.selfhtml.org/perl/module/cgi.htm#formularverarbeitung
      (Ich meine das Skipt Formularerstellung etwas weiter unten)
      Wenn ich hier die Header-Ausgabe in die Unterprogramme formular() bzw. anzeige() packe, bekomme ich wieder einen Absturz.

      @Struppi: hat es bei dir ohne das -T funktioniert? Auch bei mehrmaligem Reload?

      Florian

      wenn ich in einer Subroutine die Funktion header() des CGI-Moduls aufrufe (teilweise erst nach mehrmaligem Aufruf des Skriptes), stürzt mein Webserver ab (XAMPP 1.7.3 unter WinXP bzw. MacOS 10.5.8).

      Wirklich ein Absturz?

      Woran kann das liegen bzw. was mache ich falsch?

      Wenn ich das Skript unter WinXP testet, beschwert sich Perl über das -T:

      perl t.pl  
      "-T" is on the #! line, it must also be used on the command line at t.pl line 1.  
      
      
      
      >   
      > Probier's mal ohne -T.  
      >   
      > Struppi.