Array-name aus Variable

Hallo,

ich komme da nicht so recht weiter. Vielleicht kann mir jemand von Euch helfen:

Ich habe in einem Perl-Programm folgende Deklaration von Arrays:

my @tabellen = (‚chargedid‘,‚charges‘);
my @chargedid = (6=>1,7=>1,9=>1,11=>3);
my @charges = (6=>1,7=>1,14=>1,15=>1,17=>3);

Im Laufe des Programms wird das Array @tabellen ueber eine Schleife abgearbeitet.
Waehrend der Abarbeitung brauche ich die Daten aus den beiden anderen Arrays und zwar jeweils das mit dem Namen vom dem Inhalt von @tabellen.

Ich komme nicht dahinter, die ich das loesen kann, um auf das jeweils dazugehoerige Array zuzugreifen.
@$tabellen
geht ja wohl nicht.

In Wirklichkeit ist die Liste @tabellen natuerlich viel groesse (ueber 100 Eintraege gross) und ebensoviele Arrays gibt es dazu.

Hat jemand eine Idee?

Chris

Hallo Chris,

ich weiß nicht, ob ich dich richtig verstanden habe. Du möchtest also auf die Einträge von @tabellen zugreifen und sie quasi als Variablen benutzen? Soweit ich weiß kann Perl sowas, Stichwort „symbolic references“. Davon würde ich aber unbedingt abraten, schlechter Stil. Ich würde an der Stelle z.B. einen Hash und richtige Referenzen einsetzen:

my @chargedid = (6=\>1,7=\>1,9=\>1,11=\>3);
my @charges = (6=\>1,7=\>1,14=\>1,15=\>1,17=\>3);

my %tabellen = ('chargedid' =\> \@chargedid, 'charges' =\> \@charges);

# alternativ mit Array:
my @tabellen = (\@chargedid, \@charges);

# und Iterieren z.B. mit:

foreach my $tab (keys %tabellen) {
print $tabellen{$tab}-\>[42]; #wichtig: Pfeil -\> zum Dereferenzieren
}

#Array-Variante:
foreach my $tab (@tabellen) {
print $tab-\>[42];
}

Gruß
Chondron

Hallo Chris

Ich habe in einem Perl-Programm folgende Deklaration von
Arrays:

my @tabellen = (‚chargedid‘,‚charges‘);
my @chargedid = (6=>1,7=>1,9=>1,11=>3);
my @charges = (6=>1,7=>1,14=>1,15=>1,17=>3);

Ich komme nicht dahinter, die ich das loesen kann, um auf das
jeweils dazugehoerige Array zuzugreifen.
@$tabellen
geht ja wohl nicht.

Doch, geht schon.

Auf die schnelle fällt mir nicht ein,
wie das mit my-Variablen geht, aber mit
globalen Variablen

 our @tabellen = ('chargedid','charges');
 our @chargedid = (6=\>1, 7=\>1, 9=\>1, 11=\>3);
 our @charges = (6=\>1, 7=\>1, 14=\>1, 15=\>1, 17=\>3);

geht auf jeden Fall: @{ $tabellenname }

 use strict;
 use warnings;

 ...
 Felder hier
 ...

 for my $tb (@tabellen) {
**no strict 'refs'; # watch out**
 print join( ' ', @{ $tb } ), "\n";
 }

Die gekennzeichnete Zeile („watch out“)
weist auf das Problem hin, wir arbeiten
hier mit symbolischen Referenzen - und
sowas sollte man nur verwenden, wenn man
genau weiss, was man tut.

Im grunde genommen sollte man also sein
Programm so strukturieren, daß man dieser
symbolischen Referenzen nicht bedarf.

Eine (die beste und üblichste) Variante wurde
hier im Thread bereits gepostet, man legt
Referenzen auf die Felder in einen Hash.

Grüße

Hallo,

Ich komme nicht dahinter, die ich das loesen kann, um auf das
jeweils dazugehoerige Array zuzugreifen.
@$tabellen
geht ja wohl nicht.

Doch, geht schon.

Auf die schnelle fällt mir nicht ein,
wie das mit my-Variablen geht,

Das liegt daran, dass das nicht ohne weiteres geht. Symbolische Referenzen funktionieren nur fuer Eintraege in der Symboltabelle, dort tauchen my-Variablen aber nicht auf (sondern nur im lex pad).

Man kann das ganze mit PadWalker umgehen, das ist dann aber wirklich eklig.

Gruesse,
Moritz