Klaus Mock: @Daten[$i] oder $Daten[$i]

Beitrag lesen

Hallo,

da hab ich ja wieder was dazugelernt, in meinem Perl Buch steht es nämlich nur so drin $Daten[$i], deswegen dachte ich, daß das andere falsch sei :-)

Nur wiel das eine richtig ist, muß das andere nicht falsch sein. (TMTOWDTI)

Es ist nicht falsch, aber vielleicht nicht unbedingt, was er will.

@Daten[$i] ist nämlich nicht gleich $Daten[$i].

$Daten[$i] = Skalar
@Daten[$i] = Array (1)

Um es nochmals zu verdeutlichen:
Das macht einen gewaltigen Unterschied, vor allem bei einer Zuweisung.
Beispiel:
<code>
#!/usr/bin/perl

my @daten;

@daten[0] = gmtime;
$daten[1] = gmtime;

print join("\n",@daten);
</code>

ergibt die Ausgabe

<result>
28
Sun Jan 27 12:35:28 2002
</result>

warum?
gmtime liefert unterschiedliche Daten, je nachdem,. ob es im Listenkontext oder Skalarkontext aufgerufen wird.
Im ersten Fall, liefert es die Einzelwerte der aktuellen Urzeit, wobei der erste die Sekunden sind. Im zweiten Fall liefert es einen vollständigen Datumsstring.
@daten[0] zwingt gmtime aber im Listenkontext zu arbeiten, nimmt aber nur einen Wert auf, hier also die Anzahl der Sekunden.

Grüße
  Klaus