PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PERL: dynamische Variable



rthill
23-05-2005, 22:26
An alle Experten, kann man in Perl dynamische Variablen erstellen? Ich möchte folgendes machen:

#!/usr/bin/perl

my $ldapAttributes = "['sn','givenName','telephoneNumber']";
$ldapAttributes =~ s/[^0-9,^a-z,^A-Z]//gi;
my @ATTRS;
@ATTRS = split(/,/, $ldapAttributes);
$ending_value = scalar(@ATTRS) ;

for my $array_element(@ATTRS) {
#my (\$$array_element);
#my ${$array_element};
}

In dem roten Teil möchte ich eine Zuweisung bekommen, so dass ich die Variable $sn, $givenName und $telephoneNumber benutzen kann. Geht das überhaupt?

Danke für eure Hilfe!

Raoul

michael.sprick
24-05-2005, 00:03
Was Du da machen willst, nennt man symbolische Referenzen... von deren Benutzung wird eher abgeraten. Aber wenn Du sicher bist, dass nix passiert, dann geht das so:



my @ATTRS = ('sn','givenName','telephoneNumber');

foreach my $array_element (@ATTRS)
{
$$array_element = "xyz\n";
}

print $sn;
print $givenName;
print $telephoneNumber;



hth, Michael

baere
24-05-2005, 09:40
Mit use strict (was man ja benutzen sollte http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict) wirst Du das nicht machen können...

Ich würde eher zu einem Hash raten:

my %hash;
my @ATTRS = ('sn','givenName','telephoneNumber');

foreach my $array_element (@ATTRS)
{
$hash{$array_element} = "xyz\n";
}

print $hash{sn};
print $hash{givenName};
print $hash{telephoneNumber};

rthill
24-05-2005, 13:03
Das ist genau was ich gesucht habe. Danke an euch beide, alle beide Lösungen funktionieren!

Die zweite Lösung mit dem Hash gefällt mir eigentlich besser.

Vielen Dank!

michael.sprick
24-05-2005, 13:49
Ja - das Hash würde ich auch empfehlen.
Für Dich evtl. wichtig zu beachten, das es in einem HAsh keine doppelten Keys gibt.
Das heißt, wenn bei Deiner ldap Abfrage sowas

sn=abc, dn=blabla1, dn=blabla2, givenName=xyz, usw...

rauskommt, gibt es in dem Hash nur einmal $hash{dn} - und zwar das letzte.

Gleiches gilt eigentlich auch für die symbolischen referenzen...

nur so btw ;)