Calocybe: Elementanzahl in ArraysOfArrays abfragen

Beitrag lesen

Hi!

Hab mal ein bisschen rumprobiert und gelesen...

@manylists = (@list0, @list1, @list2);
Diese Zuweisung (@manylist) ergibt tatsächlich ein mehrdimensionales Array.

Jein. Das was Ottmar gemacht hat ja, das was ich gemacht habe nein. Der Unterschied liegt in der Art der Klammerung. Ottmar hatte seine Sublisten in eckige Klammern [] gefasst. Mit meine @list0 usw. habe ich jedoch runde Klammern vorausgesetzt. Die runden Klammern ergeben eine normale Liste:
    @list0 = ("fred", "barney", "pebbles", "bambam", "dino");
Doch die eckigen Klammern legen eine anonyme Liste an und erzeugen dann eine Referenz (Pointer) darauf:
    $listref = ["fred", "barney", "pebbles", "bambam", "dino"];

Bei der ersten Variante greift man mit $list0[2] auf ein Element zu, bei zweiten dagegen mit $$listref[2], was die Kurzform fuer ${$listref}[0] ist.

Ein mehrdimensionales Array wird in Perl so angelegt, dass entlang der einen Dimension einfach Referenzen auf Arrays aufgenommen werden, die dann jeweils in die naechste Dimension zeigen. Kurz gesagt, genau so wie es Ottmar gemacht hat.

Zwei Testprogramme:

@list0 = ("0.0", "0.1", "0.2", "0.3", "0.4");
@list1 = ("1.0", "1.1", "1.2", "1.3", "1.4");
@list2 = ("2.0", "2.1", "2.2", "2.3", "2.4");

@manylists = (@list0, @list1, @list2);

print scalar (@manylists[0]);
<<<<<<
hat als Output die einzige Zeile
15

$list0 = ["0.0", "0.1", "0.2", "0.3", "0.4"];
$list1 = ["1.0", "1.1", "1.2", "1.3", "1.4"];
$list2 = ["2.0", "2.1", "2.2", "2.3", "2.4"];

@manylists = ($list0, $list1, $list2);

print scalar @manylists, "\n";
print scalar @{$manylists[0]}, "\n";        # <-- Hier Ottmar, da erhaelst Du die Anzahl des 0. Subarrays
print $#{$manylists[0]}, "\n";

print scalar @{$manylists[0]}[1], "\n";
print scalar $manylists[0]->[1], "\n";
print scalar $manylists[0][1], "\n";
<<<<<<
hat als Output:
3
5
4
0.1
0.1
0.1

Ok, hoffe wir haben alle Klarheiten beseitigt.
Calocybe

P.S. Ach ja, genauso wie [] Referenzen auf anonyme Arrays erzeugen, kann man mit {} Refs auf anonyme Hashes erhalten. Steht aber alles in der perlref manpage (http://www.activestate.com/ActivePerl/docs/lib/Pod/perlref.html).