Perl通过哈希引用删除基本密钥

my %myHash = (
    key1 => {
        test1 => 1,test2 => 2,},key2 => {
        test1 => 3,test2 => 4,);

my $myRef = $myHash{ "key". ((~~keys %myHash) + 1) } //= {
    test1 => 5,test2 => 6,};

我,并假设上述实际上是实用的.我如何通过引用删除这个新创建的密钥?

delete $myRef;

显然不起作用

编辑:
所以从zostay我有以下……

sub deleteRef {
    my ( $hash_var,$hash_ref ) = @_;

    for ( keys %$hash_var ) {
        delete $hash_var->{$_} if ($hash_var->{$_} == $hash_ref);
    }
}

用法

deleteRef(\%myHash,$myRef);

怎么样?还是不推荐?

解决方法

这将删除%myHash中$myRef的每次出现:
for my $key (keys %myHash) {
    if ($myHash{$key} == $myRef) {
        delete $myHash{$key};
    }
}

您可以使用==来测试使用相同内存地址的引用.

我认为这是一个坏主意,但我在嘲笑你.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...