Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6706[/thread]

Tipps um Module zu schreiben: was gibt es zu beachten, oop oder nicht?

Leser: 2


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
deepblack
 2005-02-15 16:33
#51711 #51711
User since
2004-06-15
46 Artikel
BenutzerIn
[default_avatar]
moin,
ich will nunmal n paar sachen in module auslagern, nun ich hab noch nie eins geschrieben darum hab ich nun n paar fragen...
als erstes: wie schreib ich am besten eins, gibt es besondere dinge zu beachten? soll ich besondere module benutzen wie exporter?
und sowieso und überhaupt.. ist es sinnvoll das modul OO zu schreiben?
das dürfte doch sicher am saubersten sein oder nicht?
ach da fällt mir noch ein, wie ist das mit diesem '= FOO' das sind doch teile für die dokumentation mittels perldoc oder?
habt ihr evtl. gute links zu dem thema? die link liste hat mir bis jetzt noch net sonderlich viel geholfen..

schonmal vielen dank :)
We have joy, we have fun, we have a root shell on a SUN!
renee
 2005-02-15 17:05
#51712 #51712
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dokumentation in POD (Standard): http://perlpod.com/
Neuere Module sind eigentlich alle OO. Es bietet sich an, seine Module nach OO-Punkten zu erstellen...
Lesenswert: http://wiki.perl-community.de/bin....inModul
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/
GwenDragon
 2005-02-15 17:06
#51713 #51713
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Du mußt nicht OO-gerecht schreiben. Es geht auch ohne. Dann wrden halt Variablen und Subsroutinen folgendermaßen aufgerufen:

use MyModule qw( &MySub1, $MyVar1); # oder
#use MyModule;

MySub1(Test); # oder
MyModule::MySub1(Test);\n\n

<!--EDIT|GwenDragon|1108480118-->
Ishka
 2005-02-15 17:10
#51714 #51714
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
tip 1:
schreib
Code: (dl )
1;

in die letzte Zeile, da beim Laden des Modules der Rückgabewert geprüft wird und das abbricht, wenn es einen Fehler gab.

schreib am Anfang
Code: (dl )
1
2
3
4
package Modulname;

use strict;
use warnings;

hin, das hält deinen Namensraum sauber und aktiviert strict und warnings auch für das Modul.

Variablen im Modul kannst du von außen durch $Modulname::variable ansprechen, aber nur, wenn du die Variable mit our statt my deklariert hast.

sonst fällt mir grad nix ein.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Dubu
 2005-02-15 17:27
#51715 #51715
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ob man oo programmiert oder nicht ist in erster Linie Geschmackssache. Ein paar Entscheidungshilfen finden sich aber in perlmodstyle, Abschnitt "DESIGNING AND WRITING YOUR MODULE".

Ich persoenlich finde OO-Module einfacher zu schreiben als klassische, weil man sich eben nicht mit dem Exporter herumschlagen muss und Datenkapselung etc. gratis dazu bekommt.

Weitere Hilfen finden sich unter perlmod und zur OO-Programmierung unter perlboot, perltoot und perltooc sowie in Damian Conways Buch.
deepblack
 2005-02-15 17:39
#51716 #51716
User since
2004-06-15
46 Artikel
BenutzerIn
[default_avatar]
oki super danke :)
das mit 1; am ende hab ich schon gemerkt *g*
ich schlag mich gerade ne runde mit bless(); das will nicht so wie ich will.. aber gut.
ich schreib oop, das wird wohl das beste, sauberste und im endeffekt auch das einfachste sein denk ich mal.. mit dem EXPORT kann ich variablen exportieren, seh ich das richtig? also ich geb export ne liste z.b.
Code: (dl )
our @EXPORT = qw($foo $bar $foobar); 

und hab somit foo,bar und foobar ausserhalb der klasse zur verfügung. das würde den code übersichtlicher machen als wenn ich in diversen subs dann our $foo; o.ä. mache..?\n\n

<!--EDIT|deepblack|1108482095-->
We have joy, we have fun, we have a root shell on a SUN!
Crian
 2005-02-15 17:44
#51717 #51717
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Falls Du nicht-oo schreibst, benutz lieber kein EXPORT, sondern höchstens EXPORT_OK.

Rumpf:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package MeinModul;

use strict;
use warnings;

use base qw/Exporter/;
our @EXPORT      = qw//;
our @EXPORT_OK   = qw/meine_funktion/;
our %EXPORT_TAGS = (ALL => [qw/meine_funktion/]);

sub meine_funktion {
   my ($bla, $blubb) = @;
   return $bla . $blubb;
}

1;


Falls oo, dann kein Exporter.\n\n

<!--EDIT|Crian|1108482307-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
deepblack
 2005-02-15 17:58
#51718 #51718
User since
2004-06-15
46 Artikel
BenutzerIn
[default_avatar]
ok, also ich schreib oo, also lass ich das exporter weg.. schonmal gut soweit.. nur das bless will net so wie ich will.. allerdings ka wieso, hab mich da an das beispiel aus perltoot gehalten:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
sub new {
my $class = shift;
my $self = {};
$self->{DIR} = undef;
$self->{DIRH} = undef;
$self->{CONTENT} = [];
bless($self,$class);

$self->{DIR}=$_[0];
return $self;
}

wenn ich $class in "" setz schmeißt er mir zwar keine 'attempt to bless into reference..' also mal schauen obs heute noch was wird :)
We have joy, we have fun, we have a root shell on a SUN!
Crian
 2005-02-15 18:07
#51719 #51719
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
sub new {bless{},ref$_[0]||$_[0]}


*duck*
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
deepblack
 2005-02-15 18:11
#51720 #51720
User since
2004-06-15
46 Artikel
BenutzerIn
[default_avatar]
habs nu n bisschen anders..
Code: (dl )
1
2
3
my $this = shift;
my $class = ref($this) || $this;
my $self = {};

sieht aber auch irgendwie leicht komisch aus.. *g* naja solange ich nu net probleme bekomm sobald ich in ner anderen sub $self nutzen will.. *g*
We have joy, we have fun, we have a root shell on a SUN!
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2005-02-15 16:33.