Thread Array of objects (6 answers)
Opened by kajoxx at 2009-12-03 21:33

MatthiasW
 2009-12-04 15:59
#128943 #128943
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Guest kajoxx
logger->debug( "$i ". $objlist->[$i]->modulname );

Ist das so zu verstehen, dass ich mit dem ersten "->" das Array dereferenziere um auf den Index zuzugreifen zu können?

Ganz genau. Es geht allerdings auch anders: ${$objlist}[$i]->modulname;
Aber sieh dir dazu am besten die bereits genannte perldoc (perlreftut) an.

Guest kajoxx
Kannst du mir bitte das Codebeispiel genauer erklären?

Code (perl): (dl )
1
2
3
sub foo { print pop->[0], "\n" }
my @objs = map bless([rand $_]), 1..10;
$_->foo for @objs;

Es soll nur verdeutlichen, dass man in Perl nicht zu casten braucht.
In der zweiten Zeile werden 10 Objekte erzeugt, die allesamt eine Zufallszahl beinhalten.
Die Subroutine foo() gibt die, in dem jeweiligen Objekt gespeicherte Zufallszahl aus.
In der dritten Zeile laufe ich über alle Objekte und rufe für sie jeweils die foo() Methode auf.

Guest kajoxx
Was mir noch nicht so ganz klar ist die Dereferenzierung. Hast du da noch ein paar Tips oder Beispiele, welche die Unterschiede herausheben?

@{$var} oder ${$var}

Im ersten Fall sollte $var eine Referenz auf ein Array und im zweiten Fall eine Referenz auf einen Skalar enthalten, man bekäme jeweils das Array bzw. Skalar zurück. Die geschweiften Klammern wären hier unnötig, diese braucht man nur, um perl zu verdeutlichen, was man dereferenzieren möchte. In der von mir geposteten for-Schleife hätte ich die geschweiften Klammern im Ausdruck $#{$objlist} auch weglassen können, allerdings war ich mir zu dem Zeitpunkt unsicher, deshalb habe ich sie lieber gesetzt :)
Ansonsten kann ich dir nur empfehlen die perldocs zum Thema Referenzen durchzulesen. Hier alle dort enthaltenen Informationen nocheinmal zu posten wäre unsinnig ;)

MfG
Last edited: 2009-12-04 16:02:11 +0100 (CET)
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'

View full thread Array of objects