Hannes: Hash überprüfen

Hi,

ich bekomme eine Variable namens $var und hätte gerne den key dazu aus einem Hash. Nun kann es aber sein, dass es den Key garnicht gibt.
Ich hab das jetzt so abgefackelt:

if ($hash{$var})
{print $hash{$var};}
else {print "DAMN"};

Würdet ihr das auch so machen oder gibt es da einen "korrekteren" bzw. besseren Weg?

Danke.

ciao,
Hannes

  1. ich bekomme eine Variable namens $var und hätte gerne den key dazu aus einem Hash. Nun kann es aber sein, dass es den Key garnicht gibt.
    Ich hab das jetzt so abgefackelt:
    if ($hash{$var})

    Damit hast du $hash{$var} ins Leben gerufen mit dem Wert undef.

    {print $hash{$var};}

    Gibt nichts aus, weil undef

    else {print "DAMN"};

    DAMN

    Würdet ihr das auch so machen

    Ja aber nur als negatives Lernbeispiel.

    oder gibt es da einen "korrekteren" bzw. besseren Weg?

    siehe exists()

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    1. 你好 Beat,

      if ($hash{$var})

      Damit hast du $hash{$var} ins Leben gerufen mit dem Wert undef.

      Das ist falsch. Siehe:

        
      #!/usr/bin/perl -w  
        
      use strict;  
      use Data::Dumper;  
        
      my %var = ();  
        
      print "Dumper 1: ",Dumper \%var;  
      print "Keys 1: ",join(",",keys %var),"\n";  
      print "Exists 1: ",exists($var{'abc'})?"true":"false","\n";  
        
      if($var{'abc'}) {  
        print "wahr\n";  
      }  
        
      print "Dumper 2: ",Dumper \%var;  
      print "Keys 2: ",join(",",keys %var),"\n";  
      print "Exists 2: ",exists($var{'abc'})?"true":"false","\n";  
      
      

      Ausgabe:

        
      ckruse@sunshine ~ $ ./test.pl  
      Dumper 1: $VAR1 = {};  
      Keys 1:  
      Exists 1: false  
      Dumper 2: $VAR1 = {};  
      Keys 2:  
      Exists 2: false  
      ckruse@sunshine ~ $ perl -v  
        
      This is perl, v5.8.8 built for x86_64-linux  
      
      

      再见,
       克里斯蒂安

      --
      http://wwwtech.de/
      IRC-Clients und Irssi-Scripting | Flyspray
      Unsere Vorstellungen von der Ewigkeit sind genauso nuetlich wie die Mutmassungen eines Kuekens ueber die Aussenwelt bevor es die Eierschale aufbricht.
      1. 你好 Beat,

        if ($hash{$var})

        Damit hast du $hash{$var} ins Leben gerufen mit dem Wert undef.
        Das ist falsch. Siehe:

        Wo du Recht hast hast du Recht.

        mfg Beat
        --

        <o(((°>           ><o(((°>

        <°)))o><                     ><o(((°>o

  2. 你好 Hannes,

    Würdet ihr das auch so machen oder gibt es da einen "korrekteren" bzw. besseren Weg?

    Du musst unterscheiden zwischen "hat dieser Schlüssel einen wahren Wert?" und "Gibt es diesen Schlüssel?"

    Ersteres hast du abgefragt, letzteres würde man mit exists() prüfen.

    再见,
     克里斯蒂安

    --
    http://wwwtech.de/
    IRC-Clients und Irssi-Scripting | Flyspray
    Der Verstand ist der Hausherr, der Koerper sein Gast.
    1. Du musst unterscheiden zwischen "hat dieser Schlüssel einen wahren Wert?" und "Gibt es diesen Schlüssel?"

      Ersteres hast du abgefragt, letzteres würde man mit exists() prüfen.

      Cool - Danke.

      Habe es geändert und nun sieht es so aus (hab auch noch auf Referenzen umgestellt):

      if (exists $ref_hash->{$var})
      {$new=$ref_hash->{$var};}
      else {$new="Damn";}

      Und läuft einwandfrei.

      ciao,
      Hannes

  3. Hi,
    »

    ich bekomme eine Variable namens $var und hätte gerne den key dazu aus einem Hash.

    Sofern der hash eineindeutig ist, drehe den rum mit reverse:
    my %rev_hash = reverse %hash;

    Dann betrachte $var als key in %rev_hash.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.