linux-l: perl-hashs mit dynamischen Variablen
Jens Dreger
jens.dreger at physik.fu-berlin.de
Fr Feb 9 11:50:18 CET 2001
On Fri, Feb 09, 2001 at 11:34:58AM +0100, Robert C. Helling wrote:
> On Fri, 9 Feb 2001, Ulrich Wiederhold wrote:
>
> > Hallo,
> > mal wieder Perl...
> >
> > Ich habe ein hash, bei dem einem key entweder ein Skalar oder mehrere
> > Werte als Referenz-Array zugeordnet sind.
> >
> > Dieses Values möchte ich nun in Skalare und Arrays schreiben, die aus
> > dem Key generiert werden.
> >
> > Also, wenn $value($key) = Referenz, dann speichere value[i] in '$' .
> > '$key' . '[' . $i . ']', wenn keine Referenz (sondern Skalar), dann
> > speichere '$' . '$key' = $value.
> >
> > Dazu benötige ich wohl "eval". Aber trotz stundenlangem Probierens ist
> > mir bisher nix gelungen, außer das es beim Aufruf jetzt schon keine
> > Fehlermeldungen mehr gibt...
> >
>
> Ich glaube, was Du willst ist
>
> #!/usr/local/bin/perl
>
> $hash{eins} = "hallo";
> $hash{zwei} = ['nase', 'mund'];
>
> foreach (keys %hash){
> if(ref($hash{$_})){
> eval("\@$_ = \@{\$hash{$_}};");
> }
> else{
> eval("\$$_ = \$hash{$_};");
> }
> }
>
> print "eins ist $eins\n";
> print "zwei ist ". join('|', at zwei)."\n";
>
Was genau sprach doch gleich gegen:
foreach (keys %hash) {
ref($hash{$_}) ? @$_ = @{$hash{$_}} : $$_ = $hash{$_};
}
Will sagen: man braucht kein 'eval'...
Gruss,
Jens.
Mehr Informationen über die Mailingliste linux-l