[Perl] Arrayglättung


chill0r55555

Mitglied
Hallo,

ich lese eine Datei mit folgendem Code ein:

Perl:
  open ($datei, '<', "test.txt") or die "Datei1 wurde nicht gefunden\n";
  while(<$datei>)
  {
	chomp;
	@{$tempEinz[$count++]} = split("\t", $_);
  }
  close $datei;
Ich gehe so vor, weil ich die Arrayglättung umgehen will.
Jetzt habe ich einen Array der zb. wie folgt aussieht:

Code:
"123","hans","bahn"
"873","peter","bus"
"973","holger","auto"
Ich möchte nun nur immer auf das Element mit dem Namen zugreifen. Ich habe also folgendes gemacht:

Perl:
open ($datei, '>', 'output.txt') or die "Datei 3 kann nicht geoeffnet werden\n";
for(my $j=0; $j <= $#tempEinz; ++$j)
{
print $datei (@{$tempEinz[$j]}->[1]);
}
close $datei;
Das ganze funktioniert auch. Nur Leider bekomme ich immer wenn ich das Skript ausführe folgende Meldung:

Using an array as a reference is deprecated at ./neu.pl line 54.
Wobei sich dann Zeile 54 auf diese Zeile bezieht:

Perl:
print $datei (@{$tempEinz[$j]}->[1]);
Kann mir jemand sagen was ich falsch mache? Mir ist leider nicht klar wie ich den Zugriff sonst gestalten sollte.

MfG
 

renee

Erfahrenes Mitglied
Mit dem @{ ... } dereferenzierst Du schon in ein Array.

Du hast zwei Möglichkeiten, wie Du den Zugriff realisieren kannst:

Code:
$tempEinz[$j]->[1]
Hier benutzt Du die Referenz und dereferenzierst dann mit dem Pfeil

Code:
${$tempEinz[$j]}[1]
Hier dereferenzierst Du durch das ${...}. Das $ musst Du benutzen, weil Du ja nur ein einzelnes Element haben willst.

Vergleiche auch @array => $array[1]

Mehr zu Referenzen findest Du hier: http://wiki.perl-community.de/cgi-bin/foswiki/view/Perldoc/perlreftut
 

Neue Beiträge