Schrift
[thread]7090[/thread]

Module und deren globale Datenstrukturen



<< >> 5 Einträge, 1 Seite
pktm
 2005-06-30 00:49
#55841 #55841
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich habe mir ein Modul geschrieben bei dem ich einen (im Modul) globalen Hash angegelt habe um dort die ganzen Sachen zu speichern die ich halt so im Modul produziere.

Beipiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package Test;
our %config = (
   Nummer => 0,
   grafikVerzeichnis => File::Spec->catfile(qw(foo bar)),
   # usw.
);

sub setNummer {
   my $self = shift;
   my $setTo = shift;
   $config{Nummer} = $setTo;
}

sub getNummer {
   my $self = shift;
   return $config{Nummer};
}

1;


Jetzt bin cih mir aber nicht so ganz sicher ob das wirklich die feine Art ist das zu tun.

Wie sollte ich innerhalb eines Moduls verwendete Daten ablegen?
In $self? In einem globalen Hash? Oder wie sonst?

Denn, wenn ich den Hash so wie jetzt global definiere und in manchen Subs darauf zugreife ist das ja schließlich eine Art versteckte Parameter-Übergabe.
Selbiges gilt m.E. auch dann, wenn ich den Hash im Konstruktor in $self packe.

Lösungsvorschläge? Persönliche Präferenzen?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2005-06-30 01:11
#55842 #55842
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Object Oriented Perl von Damian Conway =)

mach eine/mehrere subroutine(n) mittels closures, so dass du nur über diese routinen auf
die config zugreifst

edit: also eigentlich nur klammern {} drumherum und s/our/my/\n\n

<!--EDIT|pq|1120080485-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Strat
 2005-06-30 01:27
#55843 #55843
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
solange der Hash readonly ist, tue ich mir da in der Regel keine hemmungen an, den als globalen hash des packages MyProgramm::Config zu verwenden...

Nebenbei: ich habe festgestellt, dass es oft hilfreich ist, wenn man globale variablen anders schreibt als my-variablen, z.b:
Code: (dl )
1
2
my $var
our %Config

oder so
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
lichtkind
 2005-06-30 01:36
#55844 #55844
User since
2004-03-22
5701 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ja das ist auch der grund warum in ruby globale vars nur sigils bekommen

damians ansatz ist elegant und ermöglich die configknoten mal umzubennen ohne den code ändern zu müssen aber ich mach das auch mit so ner globalen config die ich das einfach nur in configfile dumpe. was soll daran schlecht sein. es funktioniert einfach nur und ist einfach.\n\n

<!--EDIT|lichtkind|1120081102-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Strat
 2005-06-30 13:51
#55845 #55845
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=lichtkind,29.06.2005, 23:36]was soll daran schlecht sein. es funktioniert einfach nur und ist einfach.[/quote]
solange man die als readonly handhabt, nichts; wenn man da waehrend der Laufzeit werte ersetzt usw., dann sehe ich bei sowas mehr nachteile als vorteile (und bei mod_perl wird's dann erst recht lustig)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 5 Einträge, 1 Seite



View all threads created 2005-06-30 00:49.