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

Jaque
 2007-05-26 17:11
#76970 #76970
User since
2007-05-26
8 Artikel
BenutzerIn
[default_avatar]
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl 
use strict; use warnings;
my (%network, %NOA);

use Class::Struct;

struct Node => {
score => '$',
neighbor => '@',
};

# network hash mit key P0, value=Node
my $key = "P0";
my $first = Node->new();
$first->score(0.9);
$first->neighbor(['P1', 'P2', 'P3']);
$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);
our %new_network = %$refnet;

# Gebe P0 zusätlichen Nachbar
push @{$new_network{$key}->neighbor}, 'P4';

sub scoren{
my ($refmap, $refnet) = @_;
my %q_map = %$refmap; my %network = %$refnet;
my %network2;
while (my ($key, $value) = each(%q_map)) {
$network2{$key} = Node->new();
$network2{$key}->score($value);
# Nachbarn kopieren:
my @hold = @{$network{$key}->neighbor};
$network2{$key}->neighbor(\@hold);
}
return(\%network2);
}

# das Ganze ausgeben
foreach (keys %network){
print "Our old network:\n";
my $dia = $network{$_}->score;
print "$_ = $dia neighbors: @{$network{$key}->neighbor}\n\n";

print "The new network:\n";
$dia = $new_network{$_}->score;
print "$_ = $dia neighbors: @{$new_network{$key}->neighbor}\n";
}


Grossartig, deine Hinweise haben mein Problem gelöst! Danke PerlProfi  :blues:

View full thread struct als hash value: Ungewollte Ueberspeicherung