# Apache2 & mod_perl

## ttaw

moin,

ich habe mir Apache 2 und mod_perl installiert (nicht von gentoo).

Das Modul wird auch anständig geladen, aber es scheint die Berechtigung zu fehlen perl scripte in cgi-bin auszuführen.

Wenn ich ein hello.pl in cgi-bin aufrufe kommt nur ein 500 Internal Server Error:

```

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, you@your.address and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/2.0.45 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.45 OpenSSL/0.9.6i PHP/4.3.1 Server at localhost Port 80

```

Fehlt da vielleicht eine Typendeklaration wie sie bei PHP in der httpd.conf gemacht wird? (AddType application/x-httpd-php .php)...wenn ja, wie sieht die für perl aus?

Zum Laden habe ich nur 

```

LoadModule perl_module modules/mod_perl.so

```

Im Errorlog steht folgendes:

```

[Wed May 07 15:32:40 2003] [error] [client 127.0.0.1] Premature end of script headers: hello.pl

```

Ich habe es auch mit anderen Scripten versucht, kommt genau das gleiche raus  :Sad: 

----------

## ttaw

ich habe jetzt mal mod_perl nebst apache2.0.45 von gentoo installiert.

Nachdem ich die Fehler wie in den englischen Foren beschrieben ausgemerzt habe bin ich genauso weit wir vorher.

Apache startet und läuft ohne Fehlermeldung, die Module werden geladen...

Aber sobald ich irgend ein perl-script (.pl) in cgi-bin aufrufe kommt der 500er und im error.log steht das mit dem "Premature end of script headers".

Hat das denn niemand hier am Laufen?

LAMP ist einer der Hauptgründe warum ich Linux überhaupt installiere.

Wenn das mit Gentoo nicht ordentlich läuft wäre das sehr schade.

Greetz

  Torsten

----------

## A.Stranger

Hi,

vielleicht liegt der Fehler ja im Perl-Script? Poste das doch mal.

----------

## ttaw

 *A.Stranger wrote:*   

> Hi,
> 
> vielleicht liegt der Fehler ja im Perl-Script? Poste das doch mal.

 

Welches Script ich nehme ist eigentlich egal, ist bei allen so.

Mein tolles Testscript ist:

```

#!/usr/bin/perl

print "Hello world!";

```

----------

## elridion

moin,

okay.. ums kurz zu machen: dein script ist schuld! ,)

schreibs mal um, wenn es fehlt sowohl ein vernünftiger header als auch die berüchtige 1 ,)

```

#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "Hello world!";

1;

```

----------

## ShiVa

sollte mal jemand das gleiche problem haben, sollte er auch darauf achten, dass das perl schnipselchen auch ausfuehrbar gechmoddet ist ... das war mien prob ... 

vielleicht hilfts ja wem ...

----------

## marcelser

Hallo,

um ein normales perl script auszuführen hättest Du gar kein mod_perl installieren brauchen, denn ein .pl perl Programm wird nicht unter mod_perl ausgeführt sondern die STDIN/STDOUT/STDERR's werden an den perl interpreter (der normalerweise auf jedem Linux System zu finden ist) weitergeleitet. Ein .pl script ist denn auch auch ein CGI/Perl Script.

Ein mod_perl script zeichnet sich dadurch aus dass Du in der Apache config einen Perl-Handler definieren musst der aufgerufen wird wenn eine bestimmte URL eingetippst wird. Im Handler steht dann in welchem Perl Package (die enden üblicherweise in .pm und nicht .pl) welche Sub aufgerufen werden soll, also z.B. MyTools::MyPackage::dosomething wobei das Packe hier MyTools::MyPackage heisst und die sub die aufgerufen wird "dosomething". Der Vorteil an mod_perl ist dass das Package im Speicher verbleibt und somit das Perl Script nur einmal kompiliert werden muss.  Der Nachteil ist dafür dass eine Änderung in einem Package das von mod_perl benützt wird erst dann in Kraft tritt wenn man Apache neu restarted. Dein hello.pl hingegen wird bei jedem Aufruf neu kompiliert.

----------

