Grundlegende Verst

23/10/2009 - 22:04 von Oliver ojo Bedford | Report spam
Hi!

$arref = [ "eins", "zwei", "drei" ];

print $arref," ";
print @$arref," ";
print @$arref[0]," ";
print $$arref[0]," ";
print @$arref->[0]," ";

Ausgabe:

ARRAY(0x9c9df0)
einszweidrei
eins
eins
eins

Was ist der Unterschied zwischen den letzten drei Varianten?

TIA,
Oliver
 

Lesen sie die antworten

#1 Moritz Lenz
23/10/2009 - 22:35 | Warnen spam
Oliver 'ojo' Bedford wrote:
Hi!

$arref = [ "eins", "zwei", "drei" ];

print $arref," ";
print @$arref," ";
print @$arref[0]," ";
print $$arref[0]," ";
print @$arref->[0]," ";

Ausgabe:

ARRAY(0x9c9df0)
einszweidrei
eins
eins
eins

Was ist der Unterschied zwischen den letzten drei Varianten?



$$arref[0] ist das gleiche wie $arref->[0], und dereferenziert einfach
eine array-referenz.
@$arref[0] ist eine Array-Slice mit einem Element. Der Unterschied ist
der Kontext:

sub context { print wantarray ? "list" : "scalar" };

@$arref[0] = context();
$$arref[0] = context();

Die Variante ist ein altes Relikt, und warnt, wenn du perl mit der
Optioin -w startest (oder use warnings; benutzt):

Using an array as a reference is deprecated at foo.pl line 7.

Mehr dazu findest du in folgenden Perldoc-Dokumenten:

perlreftut, perlref, perldsc, perldata

Grüße,
Moritz

Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/

Ähnliche fragen