Thread struct als hash value: Ungewollte Ueberspeicherung (4 answers)
Opened by Gast at 2007-05-25 23:57

Gast Gast
 2007-05-25 23:57
#76966 #76966
Hallo Leute,

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: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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, den nur eine Kopie von %network erhalten soll
$NOA{$key}=0.22;

#Kopie von %network erhält neuen score (von 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)?  
MfG, Jaque

View full thread struct als hash value: Ungewollte Ueberspeicherung