Schrift
[thread]7548[/thread]

Hash als Option missbrauchen

Leser: 1


<< |< 1 2 3 4 ... 12 >| >> 119 Einträge, 12 Seiten
bloonix
 2005-12-19 02:24
#60959 #60959
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

oh je, ich komme einfach nicht weiter und hoffe, dass Ihr einen guten Rat
für mich habt und mir ein wenig weiterhelfen könnt.

Ich entwickel gerade einen eigenen Monitor für Linuxsysteme und habe mir
dafür ein eigenes Modul geschrieben. Nun weiß ich nicht so recht, wie ich
die Aufrufe realisieren soll, um die geforderten Daten zu sammeln.

Das, was ich bisher habe, schaut folgendermaßen aus:

(Beispiel)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
my $stats = Statistics({
  ProcStats => 1,
  MemStats => 1,
  NetStats => 1,
  DiskStats => 1,
  DiskUsage => 1,
});

sub Statistics {
  my $param = shift;
  my $stats = {};

  foreach my $opt (keys %$param) {
     if ($opt eq 'ProcStats') {
        $stats->{ProcStats} = ProcStats();
     }
     elsif ($opt eq 'NetStats') {
        $stats->{NetStats} = NetStats();
     }
      # usw ...
  }

  return $stats;
}


Also mit der Funktion Statistics() bestimme ich die Daten, die gesammelt
werden sollen. Nun schaut das ganze für mich so ulkig aus, dass dort
einfach nur die 1en gesetzt werden und ich die Existenz eines Schlüssels
als Option missbrauche. Die Schlüssel haben zudem noch die gleichen
Namen wie Funktionen in dem Modul, die die Daten sammeln. Ich habe mir
schon Gedanken darüber gemacht, ob sich vielleicht etwas objekt-
orientiertes lohnen würde, weiß aber nicht so recht ...

Kann mir jemand einen Rat geben?

Greez,
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.
esskar
 2005-12-19 02:39
#60960 #60960
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
im grunde geht das...
ich finde es aber als normalen hash schicker

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
my $stats = Statistics(
 ProcStats => 1,
 MemStats => 1,
 NetStats => 1,
 DiskStats => 1,
 DiskUsage => 1,
 UnbekannteOption => 1,
);

sub Statistics {
 my %param = @_;
 my $stats = {};

 my @KnownOptions = qw/ProcStats MemStats NetStats DiskStats DiskUsage/;

 foreach my $opt (@KnownOptions) {
    no strict 'refs';
    $stats{$opt} = &$opt() if $param{$opt};
 }

 return $stats;
}


have fun\n\n

<!--EDIT|esskar|1134954130-->
renee
 2005-12-19 02:49
#60961 #60961
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da ist noch ein " zuviel...
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/
esskar
 2005-12-19 03:02
#60962 #60962
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=renee,19.12.2005, 01:49]Da ist noch ein " zuviel...[/quote]
kann nur dreck auf deinem monitor gewesen sein :)
bloonix
 2005-12-19 03:23
#60963 #60963
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,19.12.2005, 01:49]Da ist noch ein " zuviel...[/quote]
Code: (dl )
$stats{$opt} = &$opt() if $param{$opt};


war auch nicht ganz richtig, da ich am Ende der Funktion eine Referenz
zurückgebe (return $stats;), aber zu so später Stund' sei das verziehen :-)

ähm esskar, da war ein "aber" in deiner Antwort... hatte das irgendeinen
negativen Hintergrund? Nur raus damit, bin auf gute Tipps angewiesen ...
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
 2005-12-19 03:38
#60964 #60964
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=opi,19.12.2005, 02:23]war auch nicht ganz richtig, da ich am Ende der Funktion eine Referenz
zurückgebe (return $stats;), aber zu so später Stund' sei das verziehen :-)[/quote]
dem ist doch immer noch so...

klar kann man einen hashref benutzen...
aber warum so spart man sich 2 klammern !
renee
 2005-12-19 03:42
#60965 #60965
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Einen hashref zu benutzen macht eigentlich nur dann Sinn, wenn man auch noch andere Parameter als den Hash uebergeben moechte...
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/
esskar
 2005-12-19 03:55
#60966 #60966
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
naja, es ist auch speicher freundlicher

Code: (dl )
1
2
foo(\%bar) #vs
foo(%bar)
bloonix
 2005-12-19 04:20
#60967 #60967
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,19.12.2005, 02:42]Einen hashref zu benutzen macht eigentlich nur dann Sinn, wenn man auch noch andere Parameter als den Hash uebergeben moechte...[/quote]
Nun ja, ich nutze eigentlich nur Referenzen, auch wenn man sie nur
verwenden sollte, wenn Daten an eine Funktion übergeben werden - es sei, es muss eine Kopie der Daten übergeben werden -, denn ich halte es nicht
für besonders schick, beides in einem Skript zu benutzen...

print "$hier_nen{Hash}\n";
print "$dort->{ne}->[$Referenz]\n";
print "$viel->{viel}{schlimmer}->[$noch][$ist]->{$sowas}\n";

wenn das überhaupt geht :-)
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.
renee
 2005-12-19 04:57
#60968 #60968
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ach, man kann (fast) beliebig verschachtelte Datenstrukturen aufbauen und verwenden...
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/
<< |< 1 2 3 4 ... 12 >| >> 119 Einträge, 12 Seiten



View all threads created 2005-12-19 02:24.