如何在Perl中使用标量变量删除函数中的散列元素

6ojccjat  于 2023-10-24  发布在  Perl
关注(0)|答案(1)|浏览(149)

我在使用标量变量从另一个函数中删除散列键时遇到了一个问题。所以我有一个像这样的散列-

%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')
基本上我想通过引用调用哈希,如果我不想在原始哈希中删除任何键,有人能帮助我吗?我做错了吗?谢谢

rt4zxlrg

rt4zxlrg1#

与其删除所有其他键,不如用你知道你想要的键做一个散列。这在新的hash chunk slice中很容易。这些切片返回键和值,而不仅仅是值:

use v5.20;
my @keep = qw(Functions);
my %new_hash = %existing_hash{@keep};

您甚至可以将其分配回您开始使用的哈希:

use v5.20;
my @keep = qw(Functions);
%existing_hash = %existing_hash{@keep};

当你知道密钥时,这是有效的。如果你正在寻找模式或其他你可以计算的东西,你需要做一些更复杂的事情。

相关问题