Hallo,
Nun habe ich aber eine Frage, momentan lade ich die Module erst wenn klar ist welches der Module benötigt wird, also wenn service=gästebuch, dann wird nach einer if-abfrage mit require das UM::guestbook; modul geladen. Ist es nun besser alle Module gleich von Anfang an zu laden (also über use) oder wirklich erst dann die Module wenn sie auch benötigt werden.
Zuerst einmal eine Anmerkung:
use und require arbeiten ja etwas anders. Bei use wird (siehe dazu perldoc -f use) neben dem require auch eine eventuell vorhandene import-Funktion des entsprechenden Moduls aufgerufen. Wenn das für Dich keine Rolle spielt, ist der einzige Unterschied eben, daß use im BEGIN-Block ausgeführt wird, also so früh wie möglich, während require eben zur Laufzeit ausgeführt wird, also dann, wenn die Funktion wirklich aufgerufen wird.
So nun zur eigentlichen Frage:
Da sind IMHO zwei verschiedene Szenarien zu beachten. Einerseits das 'normale' CGI-Umfeld, in dem ein Perlscript als Subprozeß gestartet wird, und andererseits die Verwendung von mod_perl.
Wenn Du kein mod_perl verwendest, solltest Du dafür sorgen, daß bei jedem Aufruf des Scripts wirklich nur jene Module geladen werden, die tatsächlich benötigt werden. Wenn, wie oben erwähnt, import keine Thema für Dich ist, dann ist IMHO require die bessere Wahl, weil use ja jedesmal _alle_ Module laden würde.
Wenn Du allerdings mod_perl verwendest, dann ist es egal, da die Module sowieso nur einmal pro Apache-Prozeß, nämlich spätestens bei der ersten Verwendung, geladen und kompiliert werden. Danach wird nur mehr auf den kompilierten Code zugegriffen. [1]
Was ist besser für den Server, was verbraucht mehr Leistung (bei use wird das ganze ja noch vor der Laufzeit geprüft, daher müsste das ja theoretisch auch schneller sein, oder?).
Wenn ich nur Perl berücksichtige, ist es egal wann kompiliert wird, da use auch nichts anderes macht als require (wieder ausgenommen der import-Geschichte). Somit kommt es auch nur darauf an, wie viele Module geladen werden müssen.
Ich denke, daß, vor allem bei vielen Zugriffen, für Dich mod_perl sowieso zum Thema werden sollte, da es gerade in solchen Konstellationen einen deutlichen Vorteil bringt. Dann ist es eigentlcih egal, wie Du die Module einbindest. Außerdem hat es noch eine Menge anderer Vorteile, wie z.B. persistente Datenbankverbindungen, d.h. daß eine Datenbankverbindung nicht für jeden Request neu aufgebaut wird, sondern so lange besteht, so lange der Webserver läuft, bzw. so lange wie eben das DBMS eine VErbindung erlaubt. Das kann vor allem bei Datenbanken, bei denen der Verbindungsaufbau lange dauert (z.B. Oracle) immens wichtig werden.
Näheres findest Du unter http://perl.apache.org
Interessant sind auf alle Fälle die Ausführungen unter http://perl.apache.org/guide/perl.html#use_require_do_INC_and, egal ob mit oder ohne mod_perl.
Ach ja, das hätte ich fast vergessen: mod_perl ist eine Erweiterung vom Apache-Server. Andere Webserver können eventuell auch ähnliches bieten (Perlex für IIS). Diese Lösungen sind aber AFAIK bei weitem nicht so leistungsfähig.
Grüße
Klaus
[1] Ausnahme könnte sein, daß Du das Modul änderst und, auf eine der möglichen Weisen, z.B. mit Apache::StatINC, eine Neu-Kompilierung erzwingst.