perl如何删除顶级/主哈希键,包括哈希值的哈希值
我有一个从子程序得到的散列值的散列。粘贴下面的代码块perl如何删除顶级/主哈希键,包括哈希值的哈希值,perl,hash,hashmap,hashtable,Perl,Hash,Hashmap,Hashtable,我有一个从子程序得到的散列值的散列。粘贴下面的代码块 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 (@i
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 configured\n\n";
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};
但它并没有像预期的那样发挥作用。我做错了什么
在删除后添加了转储程序,但没有打印任何内容。但是,我正在打印密钥,您可以在这里看到密钥的重复出现
if ($check_configs{config}{ip} && $check_configs{config}{ip} =~ /$interface{$if}/) {
print "$check_configs{config}{ip} already configured\n\n";
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#
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"
}
};
博罗丁:
与
$Data::Dumper::Useqq = 1;
print Dumper [ keys %check_configs ];
输出::
root@server:/l3dsr# perl test.pl start
10.75.21.23 already configured
configconfigroot@server:/l3dsr#
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\u配置之后添加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 ;
您确定满足了
if
条件并且执行了删除操作吗?是。它正在删除数据,但主/顶级密钥配置不会被删除,即使我指定delete$check_configs{config};我想知道为什么delete$check_configs{config}没有删除顶级键及其所有子值。无法复制:perl-MData::Dumper-we'%c=(config=>{a=>11});删除$c{config};打印转储程序\%c;'代码>我担心您没有显示真正的代码。你在问题中提出的内容无法编译。要删除该散列元素,只需delete$check\u configs{config}
。删除ip
、子网
和dscp
子键没有意义。请在散列引用上使用转储程序
,如下面的打印转储程序\%检查\u configs
,不要使用()
对子例程进行原型键入。更新:在foreach循环后添加条件时显示所需输出。但如果我把它放在里面,它就不起作用了。我不确定它从哪里得到空哈希。。