my %myHash = (
key1 => {
test1 => 1,
test2 => 2,
},
key2 => {
test1 => 3,
test2 => 4,
},
);
my $myRef = $myHash{ "key". ((~~keys %myHash) + 1) } //= {
test1 => 5,
test2 => 6,
};
Run Code Online (Sandbox Code Playgroud)
幽默我,并假设上述实际上是实用的.我如何通过引用删除这个新创建的密钥?
delete $myRef;
Run Code Online (Sandbox Code Playgroud)
显然不起作用
编辑: 所以从zostay我有以下...
sub deleteRef {
my ( $hash_var, $hash_ref ) = @_;
for ( keys %$hash_var ) {
delete $hash_var->{$_} if ($hash_var->{$_} == $hash_ref);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
deleteRef(\%myHash, $myRef);
Run Code Online (Sandbox Code Playgroud)
怎么样?还是不推荐?
这将删除所有出现的$myRefin %myHash:
for my $key (keys %myHash) {
if ($myHash{$key} == $myRef) {
delete $myHash{$key};
}
}
Run Code Online (Sandbox Code Playgroud)
您可以==使用相同的内存地址来测试引用。
我认为这是一个坏主意,但我是在幽默你。
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |