my %myHash = (
key1 => {
test1 => 1,
test2 => 2,
},
key2 => {
test1 => 3,
test2 => 4,
},
);
my $myRef = $myHash{ "key". ((~~keys %myHash) + 1) } //= {
test1 => 5,
test2 => 6,
};
Humor mich und nehme an, das Obige ist tatsächlich praktisch. Wie kann ich diesen neu erstellten Schlüssel durch die Referenz löschen?Perl Basisschlüssel löschen durch Hash Referenz
delete $myRef;
funktioniert offensichtlich nicht
EDIT: So von zostay ich folgendes haben ...
sub deleteRef {
my ($hash_var, $hash_ref) = @_;
for (keys %$hash_var) {
delete $hash_var->{$_} if ($hash_var->{$_} == $hash_ref);
}
}
Verbrauch:
deleteRef(\%myHash, $myRef);
Wie ist das? Immer noch nicht zu empfehlen? Adresse
for my $key (keys %myHash) {
if ($myHash{$key} == $myRef) {
delete $myHash{$key};
}
}
Sie ==
prüfen können, für Referenzen mit der gleichen Speicher:
I So verwende einen Verweis auf einen Hash-Schlüssel, um die "Typisierung" zu reduzieren, da ich in vielen Zeilen auf Hash-Hash-Werte zugreife. Was denkst du über das Unterprogramm? –
Das Sub ist in Ordnung. Ich empfehle Referenzvergleiche nicht, weil solche Dinge fast immer besser gelöst werden können. Allerdings ist die Definition von "besser" Gegenstand der Debatte und das eigentliche Problem, das Sie versuchen zu lösen. Ohne das eigentliche Problem zu kennen, habe ich keine Ahnung, was eine bessere Lösung wäre. – zostay