Verschachtelte Arrays in Perl

Immer wieder suchen Leute mit Google nach “perl verschachtelte Arrays”, und landen auf meiner Perl 6-Seite, wo die Erklärung natürlich nur für Perl 6 gilt.

Hier also die Perl 5-Erklärung:

Listen werden üblicherweise “geflattet”, d.h. wenn man eine Liste in eine andere einfügt, ist das Ergebnis wieder nur eine einzige Liste:

my @a = (1, (2, 3), 4, 5);
# Ist identisch mit (1, 2, 3, 4, 5)

Abhilfe schaffen Referenzen, die man durch Vorstellen eine Backslash \ erzeugt:

my @b = (2, 3);
my @a = (1, \\@b, 4, 5);
print $a[1][0], "\n";     # Ausgabe ist 2
print scalar @a, "\n";   # Länge von @a, also 4

Um aus Arrays Referenzen zu machen, kann man auch eckige Klammern nehmen:

my @a = (1, [2, 3], 4, 5);

Wenn man einer Referenz auf ein Array ein @ vorstellt, macht man daraus wieder ein “echtes” Array:

my $a = [1, 2, 3, 4];
print join ", ", @$a;

Wenn man nur auf ein Element einer Arrayreferenz zugreifen will, kann man den Pfeiloperator verwenden:

my $a = [1, 2, 3, 4];
print $a->[0], "\n";         # Ausgabe: 1

Eine Ausführliche Beschreibung gibt es in der deutschen Übersetzung von perllol (lol steht hier für “Lists of Lists”)

2 Comments »

  1. Renée Bäcker said,

    July 20, 2007 @ 11:31 am

    my @a = (1, @b, 4, 5);

    Da fehlt der Backslash…

  2. moritz said,

    July 20, 2007 @ 12:23 pm

    Danke fuer den Hinweis, den hatte Wordpress gefressen. Jetzt habe ich ihn verdoppelt, jetzt wird er einfach angezeigt :)

RSS feed for comments on this post · TrackBack URI

Leave a Comment