Hallihallo,
ich versuche gerade von CGI auf mod_perl umzusteigen und habe natürlich ein Problem :) Gegoogelt habe ich schon eine Menge, aber leider nichts funktionierendes gefunden.
Bisher habe ich mit
use lib '../modules';
mein Modulverzeichnis eingebunden, und konnte mich darauf verlassen, dass "." das korrekte Verzeichnis ist. Das ist unter mod_perl nicht mehr so.
"." ist jetzt "/" und die Module sind unauffindbar. Absolute Pfade möchte ich nicht benutzen.
Eine Lösung, die ich gefunden habe, ist per FindBin:
use FindBin;
FindBin::again();
use lib "$FindBin::Bin/../modules";
Die again()-Funktion ist extra für mod_perl erstellt worden. Leider gibts in "$Bin" das korrekte Verzeichnis erst nachdem einmal FindBin::again() aufgerufen wurde. Und da ein "use" ein "BEGIN"-Block ist, geht auch dieser Versuch schief. :( Es geht, wenn ich vorher ein Dummy-Skript aufrufe, das einfach nur FindBin::again() aufruft, und hoffe, dass mein richtiges Skript im gleichen Child-Prozess des Apachen läuft...
Zweite Lösung, die nicht tut:
use File::Basename;
use lib dirname($0).'/../modules';
Geht leider auch nicht, weil dirname() evtl. vorhandene symbolische Links nicht berücksichtigt, und genau die habe ich.
Wie löst ihr das Problem? Gibt es eine halbwegs elegante Lösung?
Grüße
Chris