hotti: Kontrollstruktur über einen hash vereinfachen

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

--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  1. 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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. »» 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

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. »» 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

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. 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

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    2. Scheint mir ein Gegenstand für eine generalisierte Routine.

      Und ich habs gleich mal bei mir aufgeschrieben:
      Guck mal Beat

      Hotte

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. 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

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. my %dispatch=(
          a=>&somesub1,
          b=>&somesub2,

          ERRROR

          a,b=>&somesub3,

          BUGFIX
            'a,b' =>&somesub3,

          );

        2. 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

          --
          Und wieder ein geiles Script geschrieben...