2012-06-17 13 views
6

perl Frage zu ref.

$ref = [11, 22, 33, 44]; 
print "$$ref[0]" . "\n"; 
print "@$ref[0]" . "\n"; 

wenn ich perl -d laufen lasse.

DB<1> p @$ref 
11223344 
DB<2> p $ref 
ARRAY(0x9dbf480) 
DB<3> p \$$ref[0] 
SCALAR(0x9dbf470) 
DB<4> p \@$ref[0] 
SCALAR(0x9dbf470) 

$$ ref [0] steht erste skalare von ARRAY (0x9dbf480).

was bedeutet @ $ ref [0]? ich kann nicht verstehen.

+5

Betrachten Sie durchlesen ['perlol'] (http://perldoc.perl.org/perllol.html) und [' perldsc'] (http://perldoc.perl.org/perldsc.html). Sie machen einen ziemlich guten Job, wenn sie dieses Zeug erklären. –

+1

Der umgekehrte Schrägstrich ist der Referenzoperator, Sie rufen \ $ ref [0] und \ @ $ ref [0] auf, Sie déferenzieren und fragen dann erneut nach einer Referenz, die Sie fast sicher nicht wollen. –

Antwort

10

$ref = [11, 22, 33, 44]; ist eine Referenz auf ein anonymes Array.

$$ref[0] oder ${$ref}[0] oder $ref->[0] Dereferenzieren des Arrays und Abrufen des ersten Elements.

@$ref[0] oder @{$ref}[0] ist das Dereferenzieren des Arrays und das Abrufen eines Array-Slice, der nur das erste Element enthält.

4

Erstens unterscheidet sich @$ref[0] von \@$ref[0]. Sie haben Ersteres in Ihrer Debug-Sitzung und letzteres in Ihrem Skript.

Wie auch immer, @$ref[0] bedeutet dasselbe wie @{$ref}[0]. Wenn Sie ein Array namens @ref hätten, wäre @ref[0] das Äquivalent. Es verwendet Slice-Notation, um das erste Element des Arrays zu erhalten.

Der Unterschied zwischen @array[$x] und $array[$x] besteht darin, dass Sie im ersten Fall mehr als einen Index angeben und eine Sammlung von Elementen aus dem Array abrufen können, anstatt nur eine. Aber wenn Sie nur einen Index zwischen den Klammern setzen, erhalten Sie das gleiche Ergebnis.