Schrift
[thread]8399[/thread]

Modul als Framework



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
bloonix
 2006-10-06 23:27
#70626 #70626
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Leute,

habt Ihr ein paar Tipps für mich? Wie baut man am besten ein Modul,
das als Framework fungieren soll, also als Grundlage für viele weitere
Module? So wie das CPAN:DBI Modul zum Beispiel.

Da es so viele unterschiedliche Betriebssysteme und Architekturen
gibt, möchte ich gerne anderen Entwicklern die Möglichkeit geben,
sich an das Projekt anzuschließen. Die Frage ist nur, wie man
soetwas am besten angeht, worauf muss geachtet werden, wie
schaut das Fehlerhandling und die Parameterübergabe aus?

Welche Frage mich am meisten quält ist, wie man weitere Module
dynamisch laden kann. Geht das auch mit use?

Gruss,
opi\n\n

<!--EDIT|opi|1160162938-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
lichtkind
 2006-10-06 23:32
#70627 #70627
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
dynamisch verstehe ich als während der lauzeit. das macht man mit require das auch von use ausgreufen wird. allerdings zur compilezeit(bytecode compilierung).

versuch erstmal rauszufinden was die software machen soll und denk dir ne gute möglichst einfache generische API aus.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
pktm
 2006-10-07 18:02
#70628 #70628
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
CGI oder was anderes? Bei CGi kannst du dir mal solche MVC-Frameworks wie CGI::Application oder Catalyst (richtig geschrieben?) ansehen. Die haben eine Plugin-Schnittstelle. Es gibt auch bei CGI::Application ein System, dass automatisch vorhandene Plugins abklappert und so weiter....

Des Weiteren gibt es noch Module::Plugin. Das könnte dich vielleicht auch noch interessieren.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2006-10-07 20:20
#70629 #70629
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei den meisten Modulen, wird einfach ein String übergeben, der den Namen des zu benutzenden Moduls beinhaltet. Bei CPAN:DBI gibt man es beim Treiber an, wobei man hier nur den Teil nach dem CPAN:DBD:: angibt. Und bei Tie gibt man den kompletten Modulnamen an.

Man sollte allerdings noch überprüfen, ob das Modul tatsächlich exstiert und dann kann man mit require arbeiten...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sid burn
 2006-10-07 22:14
#70630 #70630
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=renee,07.Oct..2006, 18:20]Man sollte allerdings noch überprüfen, ob das Modul tatsächlich exstiert und dann kann man mit require arbeiten...[/quote]
Oder einfach
Code: (dl )
1
2
eval { require ... };
if ($@) { ... }
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
bloonix
 2006-10-08 19:56
#70631 #70631
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pktm,07.10.2006, 16:02]Es gibt auch bei CGI::Application ein System, dass automatisch vorhandene Plugins abklappert und so weiter....[/quote]
Das klingt schonmal recht interessant! Sowas in der Art wäre auch
wünschenswert. Danke für den Hinweis!
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2006-10-08 20:13
#70632 #70632
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hi Renee,

du magst dich vielleicht nicht mehr daran erinnern, aber du warst es,
der mich auf die Idee mit den Framework gebracht hat! :-)

[quote=renee,07.10.2006, 18:20]Bei den meisten Modulen, wird einfach ein String übergeben, der den Namen des zu benutzenden Moduls beinhaltet. Bei CPAN:DBI gibt man es beim Treiber an, wobei man hier nur den Teil nach dem CPAN:DBD:: angibt. Und bei Tie gibt man den kompletten Modulnamen an.[/quote]

Ohne jetzt einen Blick in die Module zu werfen... wie darf ich mir das
vorstellen? CPAN:DBI vewendet die Subroutinen, die
mit CPAN:DBD:: geladen wurden? Dann müssen
alle Subroutinen immer die gleichen Namen haben? Die Daten-
strukturen müssen ebenfalls immer gleich sein? Klingt gut!

In meiner Vorstellung wäre es dann nicht mysql, postgres oder
oracle, sondern linux, freebsd, sun usw...

[quote=renee,07.10.2006, 18:20]Man sollte allerdings noch überprüfen, ob das Modul tatsächlich exstiert und dann kann man mit require arbeiten...[/quote]

Kann man denn mit require genauso arbeiten wie mit use?

Code: (dl )
1
2
require $MyModule;
my $obj = new $MyModule;


Sowas geht?

Gruss,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2006-10-08 21:05
#70633 #70633
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

ich probiere das gerade mal ein wenig aus...

Code: (dl )
1
2
3
package linux;
print "ok\n";
1;


Ein
Code: (dl )
require linux;


klappt wunderbar, wenn ich aber über eine Varible versuche...

Code: (dl )
1
2
my $OS = $^O;
require $OS;


erhalte ich die Meldung

linux did not return a true value at ./test.pl line 8.

Was mache ich hier falsch?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
esskar
 2006-10-08 21:20
#70634 #70634
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bist du sicher, dass am ende deines linux packages ein 1; steht?
bloonix
 2006-10-08 21:32
#70635 #70635
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hi esskar,

ja, 100%, darauf bin ich auch schon gekommen und der Aufruf
von require linux; klappt ja auch!

Wenn ich ein .pm anhänge, dann klappt es erst!

test.pl

Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use strict;
use warnings;

my $OS = $^O;
require "${OS}.pm";
linux->foo;


linux.pm

Code: (dl )
1
2
3
4
5
package linux;

sub foo { print "$_[0]\n"; }

1;


aber mit require $OS; leider nicht.

Woran könnte das sonst noch liegen?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2006-10-06 23:27.