[Dresden-pm] Hash slice (war Re: Problem mit Moduleinbindung)
Steffen Schwigon
schwigon at webit.de
Mi Aug 15 01:45:31 PDT 2007
Hi!
Was wir bei der Gelegenheit noch ästhetischer machen können, ist der
Ergebnis-Hash, dann wird die Zeile auch nicht zu lang:
"Thomas Rittsche" <thomas.rittsche at gmail.com> writes:
> ($value{'a'}, $value{'b'}, $value{'c'}) = eval"$myModul::calculate(\%val)";
Vorab: bei Hashkeys kannst und solltest Du grundsätzlich die
Hochkommas weglassen, wenn es eindeutig Strings sind:
($value{a}, $value{b}, $value{c}) = eval "$myModul::calculate".'(\%val)';
Jetzt zum eigentlichen: es gibt's eine Syntax, um mehrere Hash-Entries
am Stück anzugeben, ein sogenannter Hash-Slice:
@value{qw(a b c)} = eval "$myModul::calculate".'(\%val)';
Beachte die Kombination aus Sigil @ (obwohl es Hash ist) und
geschweiften Klammern. Aus den geschweiften Klammern geht hervor, dass
es ein Hashzugriff ist und das @ steht da, weil das Ergebis ein Array
ist, nämlich alle Hashelemente, deren Keys in der geschweiften Klammer
stehen.
Das qw() verwende ich, um kein Komma/Hochkomma-Plaque zu bekommen,
sonst stünde da:
@value{'a', 'b', 'c'} = eval "$myModul::calculate".'(\%val)';
Das nur zur Erläuterung.
Du kannst Dir mit Hashslices Deine Keys auch noch dynamisch
zusammensetzen und dann das Array der Keys verwenden, logisch:
my @keys = qw(a b c);
@value{@keys} = eval "$myModul::calculate".'(\%val)';
Steffen
--
Steffen Schwigon <schwigon at webit.de>
Dresden Perl Mongers <http://dresden-pm.org/>
Deutscher Perl-Workshop <http://www.perl-workshop.de/>