2016-04-07 12 views
0

Ich bin ein Anfänger in Perl und ich versuche, einen Wert aus einem gesegneten Hash zu bekommen.Suche nach einem Wert in gesegnetem Hash

Der Wert ist IP-Adressen, Ich habe versucht ohne Erfolg

print $vm->guest->ipStack->dnsConfig->ipAddress; 

print $vm->guest->ipStack{dnsConfig}{ipAddress}; 


$VAR1 = [ 
    bless({ 

     "ipRouteConfig" => bless({ 

      "ipRoute" => [ 

       bless({ 
        "gateway" => bless({ 
         "device" => 0, 
         "ipAddress" => "10.*******" 
        }, 'NetIpRouteConfigInfoGateway'), 
        "network" => "0.0.0.0", 
        "prefixLength" => 0 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "network" => "1***********", 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway'), 
        "prefixLength" => 23 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "prefixLength" => 32, 
        "network" => "10**************", 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway') 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "prefixLength" => 32, 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway'), 
        "network" => "1***********5" 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "prefixLength" => 4, 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway'), 
        "network" => "224.0.0.0" 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway'), 
        "network" => "255.255.255.255", 
        "prefixLength" => 32 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "prefixLength" => 64, 
        "network" => "fe80::", 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway') 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "prefixLength" => 128, 
        "network" => "fe80::", 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway') 
       }, 'NetIpRouteConfigInfoIpRoute'), 

       bless({ 
        "prefixLength" => 8, 
        "network" => "ff00::", 
        "gateway" => bless({ 
         "device" => 0 
        }, 'NetIpRouteConfigInfoGateway') 
       }, 'NetIpRouteConfigInfoIpRoute') 
      ] 

     }, 'NetIpRouteConfigInfo'), 

     "dnsConfig" => bless({ 
      "dhcp" => 0, 
      "searchDomain" => [ 
       "france" 
      ], 
      "hostName" => "HOST", 
      "ipAddress" => [ 
       "10.60****", 
       "10.6*****", 
       "10.8*****" 
      ], 
      "domainName" => "france" 
     }, 'NetDnsConfigInfo') 

    }, 'GuestStackInfo') 
] 
+1

Welche Version der vmware SDK ist das? Hast du die Dokumentation? Können Sie Ihre Frage bitte bearbeiten und den Code hinzufügen, der Data :: Dumper Ausgabe erzeugt. – simbabque

Antwort

3

Was auch immer Sie abgeladen haben ein Array ist, nicht ein Hash. Sie müssen den Anruf zu Dumper zeigen, damit wir Sie richtig Auch

helfen, da dies eine Struktur der seligen Objekte ist, Sie ihre Methoden verwenden sollten Informationen zuzugreifen, nicht durch die „Hintertür gehen "und direkt mit der Datenstruktur zu tun haben. Leider GuestStackInfo und NetDnsConfigInfo sind VMware-Klassen und nicht einer der Standard-Perl-Typen, also kann ich nicht den Eindruck erwecken, welche Methodenaufrufe

Hier geeignet sein können, sind einige Hinweise

  • Die Struktur bezeichnet durch $VAR1 ein ein-Element-Array ein GuestStackInfo Objekt

  • Das GuestStackInfo Objekt enthält ein NetIpRouteConfigInfo Objekt und ein NetDnsConfigInfo Objekt enthält. Ich nehme an, Sie in letzterem interessiert sind, wie Sie sagen: „Der Wert ist IP-Adressen“, und der nächste Hash-Schlüssel ist ipAddress im NetDnsConfigInfo Objekt

  • Das ipAddress Element Verweis auf einen Array ist der IP-Adresse -ähnlichen Saiten

um dieses Array zugreifen Sie

my $addresses = $VAR1->[0]{dnsConfig}{ipAddress}; 

schreiben und dann zu drucken sie alle aus, verwenden

print "$_\n" for @$addresses; 

Aber nehmen Sie bitte meiner ersten Bemerkungen beachten Sie - sollten Sie Methodenaufrufe verwenden und nicht um die Datenstruktur wie diese stoßen. Gibt es Unterlagen für diese Klassen?

+0

Es funktioniert, danke. Ich werde nach Dokumentationsklassen suchen. –