J
Jaque
Grünschnabel
[Perl]Ungewollte Ueberspeicherung von Werten eines struct in einem hash
Hallo,
mein Problem ist, dass die "score"-Werte des globalen hash %network ueberspeichert werden.
Was ich will ist, dass in der Subroutine "scoren" eine Kopie von %network mit dem value von %NOA ausgestattet und zurueckgegeben wird. (Siehe nachfolgendes Bsp.)
Am Ende sollte ausgegeben werden P0=0.9
AUSGABE: P0=0.22
Kann mir Jemand sagen, wie man diese Ueberspeicherung vermeidet (eine wirkliche Kopie %network erzeugt)?
Waere schoen wenn mir jemand weiterhelfen kann!
MfG, Jaque
Hallo,
mein Problem ist, dass die "score"-Werte des globalen hash %network ueberspeichert werden.
Was ich will ist, dass in der Subroutine "scoren" eine Kopie von %network mit dem value von %NOA ausgestattet und zurueckgegeben wird. (Siehe nachfolgendes Bsp.)
Am Ende sollte ausgegeben werden P0=0.9
Code:
my (%network, %NOA);
use Class::Struct;
struct Node => {
score => '$',
strange => '@',
};
# network hash mit key P0, value=Node
my $key = "P0";
my $first = Node->new();
$first->score(0.9);
$network{$key} = $first;
# der hash mit dem Wert (0.22), den nur eine Kopie von %network erhalten soll
# leider aber auch %network erhält!
$NOA{$key}=0.22;
#Kopie von %network erhaelt neuen score (value NOA)
our $refnet = scoren(\%NOA, \%network);
sub scoren{
my ($refmap, $refnet) = @_;
my %q_map = %$refmap; my %network2 = %$refnet;
while (my ($key, $value) = each(%q_map)) {
$network2{$key}->score($value);
}
return(\%network2);
}
foreach (keys %network){
$dia = $network{$_}->score;
print "$_ = $dia \n";
}
AUSGABE: P0=0.22
Kann mir Jemand sagen, wie man diese Ueberspeicherung vermeidet (eine wirkliche Kopie %network erzeugt)?
Waere schoen wenn mir jemand weiterhelfen kann!
MfG, Jaque
Zuletzt bearbeitet: