Perl如何删除顶级/主哈希键,包括它的一个哈希值的哈希



我有一个从子程序获得的哈希值的哈希值。将代码块粘贴到下面。

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 ;

相关内容

最新更新