DBI-Objektinstanz an Modul übergeben
DBI-Objektinstanz an Modul übergeben
am 07.08.2006 03:40:42 von Thomas Skora
Hallo alle zusammen!
In einem Projekt an dem ich derzeit arbeite trat folgende Situation ein:
es existiert ein Modul BlaXML::Task, welches per DBI
Datenbankoperationen ausführen soll. Das DBI-Objekt wurde in main::
erstellt.
Um DB-Operationen auszuführen greif ich einfach auf den main-Namespace
zurück, was nicht sonderlich elegant ist. Lieber wäre es mir, wenn ich
das DBI-Objekt an BlaXML::Task übergeben würde.
BlaXML::Task->init($dbh) und paar andere Variationen machen nicht das,
was ich mir erhofft hab. Und das überfliegen diverser Perldocs brachte
auch keine Erleuchtung.
Wie mach ich sowas am elegantesten? $::dbh->do(...) tuts hier zwar
hervorragend, ich wäre einem sauberen Stil dennoch nicht abgeneigt ;-)
Re: DBI-Objektinstanz an Modul übergeben
am 07.08.2006 13:25:56 von Reinhard Pagitsch
Hallo Thomas,
Thomas Skora wrote:
> Hallo alle zusammen!
>
> In einem Projekt an dem ich derzeit arbeite trat folgende Situation ein:
> es existiert ein Modul BlaXML::Task, welches per DBI
> Datenbankoperationen ausführen soll. Das DBI-Objekt wurde in main::
> erstellt.
>
> Um DB-Operationen auszuführen greif ich einfach auf den main-Namespace
> zurück, was nicht sonderlich elegant ist. Lieber wäre es mir, wenn ich
> das DBI-Objekt an BlaXML::Task übergeben würde.
>
> BlaXML::Task->init($dbh) und paar andere Variationen machen nicht das,
> was ich mir erhofft hab. Und das überfliegen diverser Perldocs brachte
> auch keine Erleuchtung.
Warum sollte das nicht gehen? Wie sieht der Code des Modules aus? Ich
habe bei solchen Konstrukten eigentlich kein Problem.
sub init
{
my $dbh = shift;
......
}
Das sollte doch eigentlich funktionieren?
regards,
Reinhard
--
PM replays nur an reinhard dot pagitsch at isis-papyrus dot com.
Die Adresse im From/Replay To wird nicht gelesen.
Re: DBI-Objektinstanz an Modul übergeben
am 07.08.2006 14:24:38 von Thomas Skora
Reinhard Pagitsch wrote:
> Warum sollte das nicht gehen? Wie sieht der Code des Modules aus?
Modul (BlaXML/Task.pm):
package BlaXML::Task;
sub init {
$dbh = shift;
}
[...]
Hauptprogramm (index.cgi):
[...]
BlaXML::Task->init($dbh);
[...]
> Ich habe bei solchen Konstrukten eigentlich kein Problem.
>
> sub init
> {
> my $dbh = shift;
> ......
> }
>
> Das sollte doch eigentlich funktionieren?
Dachte ich auch...$dbh funktioniert im Namespace main:: einwandfrei.
Wenn ich es da mit print ausgebe ist es auch ein Hash=DBI. In
BlaXML::Task dagegen gibt print auch BlaXML::Task aus.
Thomas
Re: DBI-Objektinstanz an Modul übergeben
am 07.08.2006 21:17:30 von Maluku
Reinhard Pagitsch schrieb:
> Thomas Skora wrote:
>>BlaXML::Task->init($dbh)
>
> sub init
> {
> my $dbh = shift;
> ......
> }
>
> Das sollte doch eigentlich funktionieren?
Nein.
sub init {
my $class=shift;
my $dbh=shift;
}
wobei $class dann "BlaXML::Task" ist wenn init über
BlaXML::Task->init($dbh) aufgerufen wird.
--
$_='';s%%`^.*`s;.*;uhtnmo;;a>lha~a>inu~a>fmk~a>rou~a>duM~a>b tl~s;&&&&&&;
!d1!l2!b3!i4!f5!r6q(?);e;Z``}a>&&&`sub# "1#{#"_=shift#;s^"2^"3#^;``;~`
return #"_#}``^!&&`"1(#""2)#\.`Z%x;s~Z~print~g;s/#/\\/g;
s/`(.)(.+?)`(.+?)`/s$1$2$1$3$1g\;/gsx;s;&;(.);g;y^"^$^;print ;
Re: DBI-Objektinstanz an Modul übergeben
am 07.08.2006 21:40:00 von hjp-usenet2
On Mon, 07 Aug 2006 14:24:38 +0200, Thomas Skora wrote:
> Modul (BlaXML/Task.pm):
> package BlaXML::Task;
>
> sub init {
> $dbh = shift;
> }
> [...]
>
> Hauptprogramm (index.cgi):
> [...]
> BlaXML::Task->init($dbh);
> [...]
>
>> Ich habe bei solchen Konstrukten eigentlich kein Problem.
>>
>> sub init
>> {
>> my $dbh = shift;
>> ......
>> }
>>
>> Das sollte doch eigentlich funktionieren?
>
>
> Dachte ich auch...$dbh funktioniert im Namespace main:: einwandfrei.
> Wenn ich es da mit print ausgebe ist es auch ein Hash=DBI. In
> BlaXML::Task dagegen gibt print auch BlaXML::Task aus.
Du solltest perltoot lesen. Du rufst hier init als Klassen-Methode auf, und
da wird die Klasse als erstes Argument übergeben.
sub init {
my ($class, $dbh) = @_;
...
}
Wenn Du init einfach als Subroutine aufrufen willst, dann musst Du es
mit BlaXML::Task::init($dbh) aufrufen.
hp
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
Re: DBI-Objektinstanz an Modul übergeben
am 08.08.2006 08:42:55 von Reinhard Pagitsch
Marc Lucksch wrote:
> Reinhard Pagitsch schrieb:
>> Thomas Skora wrote:
>>
>> Das sollte doch eigentlich funktionieren?
>
> Nein.
>
> sub init {
> my $class=shift;
> my $dbh=shift;
> }
Da hast du natürlich recht.
regards,
Reinhard
--
PM replays nur an reinhard dot pagitsch at isis-papyrus dot com.
Die Adresse im From/Replay To wird nicht gelesen.
Re: DBI-Objektinstanz an Modul übergeben
am 08.08.2006 09:42:07 von Thomas Skora
Peter J. Holzer wrote:
> Du solltest perltoot lesen. Du rufst hier init als Klassen-Methode auf, und
> da wird die Klasse als erstes Argument übergeben.
Argh! Da war doch was ;-)
Danke für den Hinweis!
Thomas