Hi,
So sieht doch kein zweidimensionales Array in Perl aus. Perl kann
mehrdimensionale Arrays IMHO nur durch Referenzen erzeugen, also in
deinem Fall $tab[0]->[0].
Es gibt mehrere Möglichkeiten in Perl Arrayelemente zu referenzieren. das mit $tab[0][0] ist ebenfalls gültig.
Folgende Beispiele ist lauffähig:
@tab = (["0.0","0.1","0.2","0.3"],["1.0","1.1","1.2","1.3"],["2.0","2.1","2.2","2.3"]);
(das hier soll nur mal als Beispiel-Array dienen)
Die simple Variante:
for ($i = 0; $i < @tab; $i++)
{
for ($j = 0; $j < @{$tab[$i]}; $j++)
{
print $tab[$i][$j]." ; ";
}
print "\n";
}
Is aber wegen des Semikolons auch hinter dem letzten Feld nicht so toll, könnte man natürlich abfangen aber einfacher gehts mit LanX Vorschlag:
for ($i=0; $i < @tab; $i++)
{
print join(" ; ",@{$tab[$i]})."\n";
}
Wobei "join" eine Funktion ist, die Arrayelemente zu einem String verbindet. Das Erste Argument gibt den String an, durch den die Felder getrennt werden sollen, das Zweite ist das Array.
Am effizientesten ist Franks Einzeilenlösung;
map { print join(';', @$_), "\n" } @tab;
Wobei "map" eine Anweisung, oder einen Anweisungsblock für jedes Element eines Arrays ausführt. Da in Perl ein zweidimensionales Array ein Array von Arrays (Genauer Array-Referenzen) ist wird jeweils als Element @{$tab[$i]} an den Anweisungsblock übergeben.
Ich hab das jetzt noch mal so ausführlich beschrieben, da Rolf schrieb er habe kein Lehrbuch zur Hand und der Einzeiler eventuell für Ihn etwas undurchschaubar sein könnte.
Gruß
Marcus