Thread Frage zu Array-Code (8 answers)
Opened by Ted at 2008-09-23 10:19

FIFO
 2008-09-23 12:13
#114864 #114864
User since
2005-06-01
469 Artikel
BenutzerIn

user image
mutig ist vielleicht das falsche Wort ... der Charme am Hash ist ja gerade, dass ich die innere Anordnung der Liste (und Hashes sind auch nur eindimensionale Listen) nicht kennen muss, um auf einen Wert zuzugreifen.
Zu Deinem Beispiel:
OK, die Verwendung einer Arrayreferenz macht hier das Zusammensetzen des DN-Strings übersichtlicher ...
Wie renee schon sagte, ergibt sich aus der Verwendung der key-value-Paare eine flache Liste, dabei ist der erste key das Listenelement 0, der erste value Element 1, usw.
Zugegriffen wird dann direkt auf die Listenelemente, dabei muss die Position in der Liste bekannt sein. Bei Verwendung der Hash-Syntax wird auf Werte über ihren Schlüsselnamen zugegriffen. Wenn Du Net::LDAP verwendest, musst Du der angegebenen Syntax folgen, weil die Methode ->add() diese verlangt. edit: Das heißt natürlich, dass Du den Array auch als 'normale' Liste übergeben kannst. Das zweite Element muss allerdings eine Referenz sein
Im Beispiel wird der DN-String zusammengesetzt aus:
dem 3. Element (Index 2) des Arrays (welches durch $CreateArray referenziert wird), also 'cn', danach ein '=', dann das Element mit Index 3, also 'Jo user' usw.

Die Methode add() erwartet als value bei dem Argument 'attr' dann eine anonyme Liste, die hier gefüllt ist mit den Elementen des durch $CreateArray referenzierten Arrays ... tricky ;-)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 # create the  new DN to look like this
 # " cn=Jo User + uid=0000001 , ou=bailiwick, o=mycompany, c=mycountry "

 my $NewDN = "@$CreateArray[2]=".
             "@$CreateArray[3]+".
             "@$CreateArray[4]=".
             "@$CreateArray[5],".
             $DNbranch;

 LDAPentryCreate($ldap, $NewDN, $CreateArray);

 #
 # CreateArray is a reference to an anonymous array
 # you have to dereference it in the  subroutine it's
 # passed to.
 #

 sub LDAPentryCreate
 {
    my ($ldap, $dn, $whatToCreate) = @_;
    my $result = $ldap->add ( $dn, attrs => [ @$whatToCreate ] );
    return $result;
 }
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Frage zu Array-Code