bitmuncher
Senior-Nerd
Ich stelle gerade fest, dass man scheinbar Hashes, die Hashes enthalten in Perl nicht einfach mittels 'return' zurückgeben kann, aber vielleicht übersehe ich ja auch was. Also Problem ist folgendes...
Ich habe eine Funktion, die ein Hash generiert, das wiederum Hashes enthält. Das sieht stark vereinfacht so aus:
Nun will ich die Werte an einer anderen Stelle im Code etwa so weiterverarbeiten:
Dummerweise bekomme ich aber als Ausgabe in $report lediglich ein 'Eigenschaft: 2/8 Wert: .' Erwarten tue ich bei meinen Testdaten aber ein 'Eigenschaft: attributname Wert: +20%'.
In der Zeile 'my %self_effects = $action_effects{'self'};' beschwert sich Perl auch mit 'Odd number of elements in hash assignment...'. Nun stellt sich mir natürlich die Frage, wie ich ein Hash aus Hashes in Perl von einer Funktion weitergeben lassen kann ohne es global zu machen. Hat evtl. jemand eine Idee?
Ich habe eine Funktion, die ein Hash generiert, das wiederum Hashes enthält. Das sieht stark vereinfacht so aus:
Code:
sub meinefunktion
{
my ($self_str, $opp_str) = @_;
# $self_str und $opp_str haben jeweils das format: eigenschaft1:wert,eigenschaft2:wert,usw.
# im echten programm werden sie aus einer db geholt
my %effects = (); # hash fuer die rueckgabe, wird im folgenden gefuellt
if($self_str eq '0') {
$effects{'self'}{'nothing'} = 1;
} else {
my @self_effects = split(/,/, $self_str); # die einzelnen 'eigenschaft:wert'-abschnitte trennen
my %effects_tmp = ();
foreach $effect (@self_effects) {
my @temp = split(/:/, $effect); # aufteilen in eigenschaft und wert
my ($effect_tmp, $value_tmp) = @temp;
%effects_tmp{$effect_tmp} = $value_tmp;
}
$effects{'self'} = %effects_tmp;
}
# selbiges nochmal fuer $opp_str, nur dass das resultierende hash in $effects{'opp'}
# abgelegt wird
...
return %effects;
}
Nun will ich die Werte an einer anderen Stelle im Code etwa so weiterverarbeiten:
Code:
my %action_effects = &meinefunktion($self, $opp);
if($action_effects{'self'}{'nothing'} != 1) {
my %self_effects = $action_effects{'self'};
foreach my $effect (keys %self_effects) {
$report .= "Eigenschaft: ".$effect." Wert: ".$self_effects{$effect}.".\n";
}
}
Dummerweise bekomme ich aber als Ausgabe in $report lediglich ein 'Eigenschaft: 2/8 Wert: .' Erwarten tue ich bei meinen Testdaten aber ein 'Eigenschaft: attributname Wert: +20%'.
In der Zeile 'my %self_effects = $action_effects{'self'};' beschwert sich Perl auch mit 'Odd number of elements in hash assignment...'. Nun stellt sich mir natürlich die Frage, wie ich ein Hash aus Hashes in Perl von einer Funktion weitergeben lassen kann ohne es global zu machen. Hat evtl. jemand eine Idee?