gpt4 book ai didi

perl - 仅当键没有值时,我将如何删除哈希键?

转载 作者:行者123 更新时间:2023-12-04 06:37:21 25 4
gpt4 key购买 nike

我已经构建了一个循环,该循环查找特定 VM 的所有 VMDK,然后创建输出的哈希,然后通过在 VMX 文件中查找参数来测试磁盘是否实际存在。然后,如果磁盘不存在,它将从哈希中删除它。我遇到的问题是如何删除没有定义磁盘的哈希键。

这是代码块;

    while ($vmx_file =~ m/^(ide(?<PORT>[0-1])\:(?<DISK>[0-1]))\.present\s+=\s+"(?<PRESENT>[^"]+)["]/xmg) {
$ide_port = "$+{PORT}";
$ide_disk = "$+{DISK}";
$present = "$+{PRESENT}";
if ($present eq 'FALSE') {
delete $virtual_disks{$vm}{"IDE$ide_port"}{"Disk$ide_disk"}
}
}

当上述陈述为真并且删除丢失的磁盘时,这就是我得到的哈希值。
$VAR1 = {
'Test01' => {
'SCSI0' => {
'Disk0' => '/vmfs/volumes/4c8fd27b-5876fc36-80f4-0015179fd63c/Test01/Test01.vmdk',
'Type' => 'lsilogic',
'Disk1' => '/vmfs/volumes/4c8fd27b-5876fc36-80f4-0015179fd63c/Test01/Test01_1.vmdk'
},
'IDE1' => {
'Disk0' => '/vmfs/volumes/4c8fd27b-5876fc36-80f4-0015179fd63c/ubuntu-10.10-desktop-i386.iso'
},
'IDE0' => {}
}

如您所见,子哈希“IDE0”为空,因为列出的磁盘不在 VMX 文件中。现在我想做的是删除整个“IDE0”哈希,因为其中没有任何内容。但是我只希望它在没有散列的情况下将其删除。因为根据 IDE 规范,它最多可以有 2 个磁盘。跟我来?

最佳答案

计算第一轮删除后剩余的 key 。如果计数为零,则在更高级别删除。

 if (scalar keys %{ $virtual_disk{$vm}{"IDE$ide_port"} } == 0) {
delete $virtual_disks{$vm}{"IDE$ide_port"}
}

关于perl - 仅当键没有值时,我将如何删除哈希键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com