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

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

mock 我,并假设以上内容实际上是切实可行的。如何通过引用删除此新创建的 key ?
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);

怎么样?还是不推荐?

最佳答案

这将删除$myRef中所有出现的%myHash:

for my $key (keys %myHash) {
    if ($myHash{$key} == $myRef) {
        delete $myHash{$key};
    }
}

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

我认为这是一个坏主意,但我在逗你。

10-07 15:04