我将如何在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";
}
}