我在使用标量变量从另一个函数中删除散列键时遇到了一个问题。所以我有一个像这样的散列-
%larmhash = ('EntityValidation' => 'arm.account.tqLedgerDataRef.xml', 'Functions' => 'arm.billing.fUtilities_Integer.xml', 'EntityValidation' => 'pcom.cnCustomer.exp');
我把这个散列传递给另一个函数,在另一个函数中,我迭代散列键,在一个开关的情况下,如果键不是 Functions 类型的键,我试图删除任何键值对
这就是我想做的
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use Switch;
sub zBuildHash (\%) {
my $lhash = shift;
my @lvalue;
while (my ($key) = each(%$lhash)) {
switch($key) {
case 'Functions' {
# Do something here
}
else {
# Delete the key-value from the hash
delete $lhash->{$key};
}
}
}
}
sub zPrepareEntityPurgeHash {
my %larmhash = ('EntityValidation' => 'arm.account.tqLedgerDataRef.xml', 'Functions' => 'arm.billing.fUtilities_Integer.xml', 'EntityValidation' => 'pcom.cnCustomer.exp');
zBuildHash(%larmhash);
print Dumper(%larmhash);
}
在上面zBuildHash()函数调用末尾的代码中,当我在zPrepareXtyPurgeHash()中打印哈希值时,我应该只得到('Functions' => 'arm.billing.fUtilities_Integer.xml')
基本上我想通过引用调用哈希,如果我不想在原始哈希中删除任何键,有人能帮助我吗?我做错了吗?谢谢
1条答案
按热度按时间rt4zxlrg1#
与其删除所有其他键,不如用你知道你想要的键做一个散列。这在新的hash chunk slice中很容易。这些切片返回键和值,而不仅仅是值:
您甚至可以将其分配回您开始使用的哈希:
当你知道密钥时,这是有效的。如果你正在寻找模式或其他你可以计算的东西,你需要做一些更复杂的事情。