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