On Wednesday 04 July 2007 16:42, Hannes Vogelmann wrote:
Für den speziellen Zweck, wo ich es jetzt hier brauche benötige ich kein Array. Ich will nur Variablen-Namen dynamisch aus sich verändernden Variablen aufrufen bzw. generieren können.
Wenn Du weißt, was Du tust, geht das. Es führt aber zu schlecht wartbaren Programmen. So, nachdem das gesagt ist, ... $ perl -e '$a="otto"; ${"a"}="klaus"; print "$a\n"' klaus Du arbeitest hier mit symbolischen Referenzen. D.h. mit "use strict 'refs'" funktioniert das nicht. ABER: $ perl -e 'my $a="otto"; ${"a"}="klaus"; print "$a\n"' otto Hier verdeckt die mit "my" deklarierte Variable die globale Variable $a. Du kannst sie nur noch voll referenzieren als $main::a: $ perl -e 'my $a="otto"; ${"a"}="klaus"; print "$a, $main::a\n"' otto, klaus Soll trotzdem die my-Variable angesprochen werden, brauchst Du eval: $ perl -e 'my $a="otto"; ${"a"}="klaus"; eval q{$a="heinz"}; print "$a, $main::a\n"' heinz, klaus Willst Du also mit globalen oder mit "local" lokalisierten Variable arbeiten, dann so: $ perl -e '${"a$_"}="x$_" for (1..3); print "$a1 $a2 $a3\n"' x1 x2 x3 Mit my-Variablen geht es nur so: $ perl -e 'my ($a1,$a2,$a3); eval qq{\$a$_="x$_"} for (1..3); print "$a1 $a2 $a3\n"' x1 x2 x3 Das birgt aber die Gefahr, daß in "x$_" irgendwas steht, was Du quoten müßtest. Besser ist es da mit richtigen Referenzen zu arbeiten: $ perl -e 'my ($a1,$a2,$a3); ${eval q{\$a}.$_}="x$_" for (1..3); print "$a1 $a2 $a3\n"' x1 x2 x3 Hier bestimmst Du mit dem String-eval nur die Adresse Deiner Variablen, die Du gleich wieder durch das umschließende ${} für die Zuweisung benutzt. Torsten