Kontrollstruktur über einen hash vereinfachen
hotti
- perl
hi,
ich habe einen hash
getopts('abcd', %opts); # options as above. Values in %opts
und bei den vier Optionen viele mögliche Kombinationen, von denen mich aber nur ein paar davon interessieren. Beispielsweise will ich in einer Kontrollstruktur abfragen, ob _nur_ der key 'a' vorhanden ist:
Bsp.: if($opts{a} && (scalar(keys %opts == 1))){# naja}
Frage allgemein: Gibt es hinsichtlich eines %hash Möglichkeiten einer einfacheren Abfrage, ob 'nur' ein bestimmter Key vorhanden ist?
Hotte
Frage allgemein: Gibt es hinsichtlich eines %hash Möglichkeiten einer einfacheren Abfrage, ob 'nur' ein bestimmter Key vorhanden ist?
oder eine bestimmte Kombination von Keys?
my $metakey= join ('###', sort keys %hash )
$metaky eq 'bla###blub' and do('deldö')
Scheint mir ein Gegenstand für eine generalisierte Routine.
mfg Beat
»» Frage allgemein: Gibt es hinsichtlich eines %hash Möglichkeiten einer einfacheren Abfrage, ob 'nur' ein bestimmter Key vorhanden ist?
oder eine bestimmte Kombination von Keys?
my $metakey= join ('###', sort keys %hash )
$metaky eq 'bla###blub' and do('deldö')Scheint mir ein Gegenstand für eine generalisierte Routine.
Boaheyh, das ist ja genial, affengeil.
Danke Dir!!!!
Hotte
»» Frage allgemein: Gibt es hinsichtlich eines %hash Möglichkeiten einer einfacheren Abfrage, ob 'nur' ein bestimmter Key vorhanden ist?
oder eine bestimmte Kombination von Keys?
my $metakey= join ('###', sort keys %hash )
$metaky eq 'bla###blub' and do('deldö')Scheint mir ein Gegenstand für eine generalisierte Routine.
Boaheyh, das ist ja genial, affengeil.
Perl 5.10 erlaubt den direkten Vergleich zwischen Arrays. Das würde join und den unsicheren Separator überflüssig machen.
mfg Beat
hi Beat,
Perl 5.10 erlaubt den direkten Vergleich zwischen Arrays. Das würde join und den unsicheren Separator überflüssig machen.
Unsicherer Seperator? Achwas, den Seppi lass ich einfach weg, guck mal;
my $metakey = join '', sort keys %opts; # a, ab, abc, abcd, ac, ad...
;-)
Hotte
Scheint mir ein Gegenstand für eine generalisierte Routine.
Und ich habs gleich mal bei mir aufgeschrieben:
Guck mal Beat
Hotte
Scheint mir ein Gegenstand für eine generalisierte Routine.
Und ich habs gleich mal bei mir aufgeschrieben:
Guck mal Beat
Keine Rose ohne Dornen.
Es erscheint mir relativ unsicher. Einen Separator würde ich beibehalten. Irgendwann gehen dir die Buchstaben aus,
Anstatt if/else
ein hash mit codereferenzen
my %dispatch=(
a=>&somesub1,
b=>&somesub2,
a,b=>&somesub3,
);
my $metakey = join ',' sort keys %options;
exists $dispatch{ $metakey } and $dispatch{ $metakey }->();
mfg Beat
my %dispatch=(
a=>&somesub1,
b=>&somesub2,
ERRROR
a,b=>&somesub3,
BUGFIX
'a,b' =>&somesub3,
);
Es erscheint mir relativ unsicher. Einen Separator würde ich beibehalten. Irgendwann gehen dir die Buchstaben aus,
Nene, soviele Opts kanns nicht geben bei Getopt::Std ;-)
Alles schon verwurstet
Bei Getopt::Long siehts freilich ein bischen anders aus..
Hotte