Perl Module einbinden
Manuel Burghammer
- perl
folgendes problem:
use config; # configuration
use modules; # datenbankmodul
in modules steht folgendes:
package modules;
sub database_read
{
open(DATABASE, "<$base");
@base_datas = <DATABASE>;
close DATABASE;
}
1;
wenn ich das modul jetzt mit &modules::database_read; einbinde wird die datenbank nicht geoeffnet.....ich vermute das der parameter ($base) nicht uebergeben wird......was kann ich dagegen machen ????
ich brauche das auslesen der textdatenbank in einer extra datei weil ich spaeter nur die module.pm austauschen will wenn ich auf eine mySQL datenbank zugreifen will
gibts ne loesung oder muss ich solche sachen in der hauptdatei ablegen ??
SoLong M.
hi!
package modules;
sub database_read
»» {
»» open(DATABASE, "<$base");
»» @base_datas = <DATABASE>;
»» close DATABASE;
»» }
1;
wenn ich das modul jetzt mit &modules::database_read; einbinde wird die datenbank nicht geoeffnet.....
ich vermute das der parameter ($base) nicht uebergeben wird......was kann ich dagegen machen ????
Den Paramter $base übergeben? Sag blos, du arbeitest mit globalen Variablen für sowas? Igitt, igitt...
=== cut ===
sub database_read
{
my $base = shift;
...
}
...
&modules::database_read($base);
=== cut ===
Standardmäßig sollten Modulnamen eigener Module übrigens mit Großbuchstaben beginnen, da Perl-eigene
komplett aus Kleinbuchstaben bestehen: perldoc perlstyle
bye, Frank!
hi,
Den Paramter $base übergeben? Sag blos, du arbeitest mit globalen Variablen für sowas? Igitt, igitt...
yepp.....im moment schon noch....ist nur ein vesuchsscript ob das ueberhaupt so klappt wies soll :o))
wenn ich das modul jetzt mit &modules::database_read; einbinde wird die datenbank nicht geoeffnet.....ich vermute das der parameter ($base) nicht uebergeben wird......was kann ich dagegen machen ????
Ich weiß ja nicht, wie Dein Modul funktioniert. Aber sicherlich gibt es dort drin die Möglichkeit $base zu setzten. Solltest Du das aus Deinem Programm machen müssen, so kannst Du dies mit $modules::base = 'blafasel'; erledigen ...
Jörk
package modules;
sub database_read
»» {
»» open(DATABASE, "<$base");
»» @base_datas = <DATABASE>;
»» close DATABASE;
»» }
1;
wenn ich das modul jetzt mit &modules::database_read; einbinde wird die datenbank nicht geoeffnet.....ich vermute das der parameter ($base) nicht uebergeben wird......was kann ich dagegen machen ????
Anders als Frank nehme ich Deine Aussage mal wörtlich. Die Antwort würde dann lauten: Weil Deine Funktion nicht automatisch aufgerufen wird.
Würdest Du einen solchen Aufruf in Deinen Modul-Initialisierungscode schreiben (das ist, die Stelle, wo bisher nur "1;" steht), dann würde beim Einbinden des Moduls immer auch gleich die Datenbank geöffnet.
Wobei Du dann allerdings ein anderes Problem bekommst: Wie übergibst Du Deinen expliziten Parameterwert an einen impliziten Funktionsaufruf?
Da müßten die Module-Freaks weiterhelfen können (wahrscheinlich kann man bei "use" irgendwie Parameter mit durchreichen oder etwas in der Richtung).
wenn ich das modul jetzt mit &modules::database_read; einbinde wird die datenbank nicht geoeffnet.....ich vermute das der parameter ($base) nicht uebergeben wird......was kann ich dagegen machen ????
Sorry, mein vorherigen Posting bitte streichen (Lesefehler von meiner Seite).
Wegen der fehlenden Klammern beim Funktionsaufruf habe ich falsch geschaltet und gedacht, das Öffnen sollte bereits das "use" gekoppelt werden.