#!/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"; }