Perl:访问哈希引用中的哈希元素



我将如何在foreach循环中访问此hash_ref的元素?

use strict;
use warnings;
my $services = {
    ftp    => { port => 21,   pr => "",                      waitfor => '/220/'      },
    ssh    => { port => 22,   pr => "",                      waitfor => '/SSH/'      },
    domain => { port => 42,   pr => "",                      waitfor => ''           },
    http   => { port => 80,   pr => "HEAD / HTTP/1.0nn",   waitfor => '/200/'      },
    https  => { port => 443,  pr => "HEAD / HTTP/1.0nn",   waitfor => '/200/'      },
    pop3    => { port => 110, pr => "",                      waitfor => '/+OK/'     },
    imap   => { port => 143,  pr => "",                      waitfor => '/OK/'       },
    smtp   => { port => 25,   pr => "",                      waitfor => '/SMTP/'     }
};

foreach my $key (keys %{ $services }) {
    my $port    = $service{port};
    my $waitfor = $services->{$service}->{waitfor};
}

例如,对于FTP,我想将FTP分配给标量,然后将FTP(端口,pr,waitfor)中的每个键分配给标量,以及在服务(ftp,ssh,dns等)之间循环的foreach循环中。

提前感谢您的帮助。

my $waitfor = $services->{$service}->{waitfor};

应该是

my $waitfor = $services->{$key}->{waitfor};

或者你可以使用类似的东西:

for my $id (keys %$services) {
   my $service = $services->{$id};
   my $port    = $service->{port};
   my $waitfor = $service->{waitfor};
   ...
}

甚至

for my $service (values %$services) {
   my $port    = $service->{port};
   my $waitfor = $service->{waitfor};
   ...
}

你可以很容易地做到这一点。

foreach my $service (keys %$services)   {
print "serivce = $service n";
foreach my $types (keys %$services->{$service}) {
    print "$services->{$service}->{$types} n";
}

}

最新更新