我有一个从子程序获得的哈希值的哈希值。将代码块粘贴到下面。
sub check_interfaces()
my @interfaces = IO::Interface::Simple->interfaces;
my ($ip, $subnet, $dscp) = @_;
my %check_config = (
"ip" => $ip,
"subnet" => $subnet,
"dscp" => $dscp
);
foreach my $if (@interfaces) {
if (not defined $if->address) {
next;
}
%check_configs = ( config => %check_config );
my %interface = ($if, $if->address);
if ($check_configs{config}{ip} && $check_configs{config}{ip} =~ /$interface{$if}/) {
print "$check_configs{config}{ip} already configurednn";
delete $check_configs{config}{ip};
delete $check_configs{config}{subnet};
delete $check_configs{config}{dscp};
delete $check_configs{config};
}
}
print Dumper %check_configs;
输出为
root@server:/l3dsr# perl test.pl start
10.75.21.23 already configured
$VAR1 = 'config';
$VAR2 = {};
$VAR1 = 'config';
$VAR2 = {
'dscp' => '2',
'ip' => '10.75.130.24',
'subnet' => '255.255.255.255'
};
我试图删除主哈希键,但没有被删除。如果我不删除,输出将是
10.75.21.23 already configured
$VAR1 = 'config';
$VAR2 = {
'dscp' => '2',
'ip' => '10.75.21.23',
'subnet' => '255.255.255.255'
};
$VAR1 = 'config';
$VAR2 = {
'dscp' => '2',
'ip' => '10.75.130.24',
'subnet' => '255.255.255.255'
};
我要做的是去掉哈希
的哈希块$VAR1 = 'config';
$VAR2 = {
'dscp' => '2',
'ip' => '10.75.21.23',
'subnet' => '255.255.255.255'
};
delete $check_configs{config}{ip};
delete $check_configs{config}{subnet};
delete $check_configs{config}{dscp};
delete $check_configs{config};
但是它没有像预期的那样工作。我哪里做错了?
在删除后添加了Dumper,但没有打印任何内容。但是,我正在打印密钥,您可以在这里看到密钥的重复出现。
if ($check_configs{config}{ip} && $check_configs{config}{ip} =~ /$interface{$if}/) {
print "$check_configs{config}{ip} already configurednn";
delete $check_configs{config}{ip};
delete $check_configs{config}{subnet};
delete $check_configs{config}{dscp};
delete $check_configs{config};
print Dumper %check_configs;
}
}
print keys %check_configs;
输出::
root@server:/l3dsr# perl test.pl start
10.75.21.23 already configured
configconfigroot@server:/l3dsr#
比较:
$Data::Dumper::Useqq = 1;
print Dumper [ keys %check_configs ];
输出::
root@cdn-fe13:/l3dsr# perl test.pl start
10.75.21.23 already configured
$VAR1 = [
"config"
];
$VAR1 = {
"config" => {}
};
$VAR1 = [
"config"
];
$VAR1 = {
"config" => {
"dscp" => 2,
"ip" => "10.75.130.24",
"subnet" => "255.255.255.255"
}
};
更新::
如果我在delete $check_configs后面添加delete,如
delete $check_configs{config}{subnet};
delete $check_configs{config}{dscp};
delete $check_configs{config};
}
}
if (!keys $check_configs{config}) {
delete $check_configs{config};
}
print keys %check_configs ;
删除空配置键。但是,如果我在上面添加它,作为
if (!keys $check_configs{config}) {
delete $check_configs{config};
}
if ($check_configs{config}{ip} && $check_configs{config}{ip} =~ /$interface{$if}/) {....
它不工作。我不确定它是从哪里得到空钥匙的。
使用以下代码。
delete $check_configs{config}{subnet};
delete $check_configs{config}{dscp};
delete $check_configs{config};
}
}
if (!keys $check_configs{config}) {
delete $check_configs{config};
}
print keys %check_configs ;