Hallo Quitschi,
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. 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?).
Auf jeden Fall laesst sich schon mal sagen, das use moderner ist und von den Perlern auf jeden Fall empfohlen wird. Vor allem, weil es erlaubt, genau das einzubinden, was man braucht - also bestimmte Variablen oder Subroutinen des eingebundenen Moduls und nicht gleich das ganze Modul (vorausgesetzt, das Modul bietet entsprechende Exporte an). Das reduziert Namensraumkonflikte, und der insgesamt kompilierte Code ist effizient und enthaelt keinen ueberfluessigen Muell.
Was schneller ist, kann ich auch nicht sagen. Bei use wird halt erst alles kompiliert, bevor irgendwas ausgefuehrt wird. Bei vielen Moduleinbindungen (wie etwa hier im Forum - siehe dazu auch </?m=30271&t=5381>) kann es bis zur Ausfuehrung schon mal zu merklichen Verzoegerungen kommen. Das geht bei require natuerlich schneller, weil da gleich mit dem Ausfuehren begonnen wird, und eingebundene Module erst dann dazukompiliert werden, wenn sie ausgefuehrt werden. Dem reinen Menschenverstand nach ergeben sich die Verzoegerungen bei require stattdessen waehrend der Ausfuehrung und summieren sich dabei. Was Dateizugriffe betrifft, ist wohl in beiden Faellen gleich viel erforderlich.
Ahja, noch eine weitere Frage... momentan ist es so das z.b. folgendes auftritt, der verteiler läd das Gästebuchmodul, dort wird dann per use gleich das Templatemodul geladen da das mit ziemlicher Sicherheit gebraucht wird, auch das Fehlermodul wird geladen (wenn ein Fehler auftritt wird der anhand eines Codes in eine für Menschen sinnvolle ausgabe gewandelt). So, nun ist es aber so das das Templatemodul auch das Fehlermodul laden muss da es ja dort auch noch zu einem Fehler kommen kann (z.b. Template nicht vorhanden etc...)... wie ist das nun, muss man hier das Fehlermodul nochmal explizit laden oder ist es noch von dem Gästebuchmodul geladen?
Als Programmierer musst du in jedem Modul, in dem du Code eines anderen Moduls verwenden willst, dieses andere Modul oder geeignete Teile davon einbinden. "Doppelteinbindungen" von Modulen in mehreren verwendeten Modulen werden von Perl automatisch erkannt und so behandelt, dass beim Kompilieren optimaler Code entsteht. Deshalb braucht man sich in Perl ja auch nicht mit Praeprozessoranweisungen wie #ifndef und #define herumzuschlagen. Da Perl das automatisch optimiert, gibt es da also auch keine Hintertuerchen, ueber die man selber irgendwas optimieren koennte.
Ich bin allerdings nicht der Oberhaeuptling in diesen Sachen - und lasse mich gerne belehren, wenn ich Unsinn gelabert hab ;-)
viele Gruesse
Stefan Muenz