2012-06-17 11 views
6

perl domanda sul rif.

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

quando eseguo perl -d.

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] è il primo scalare di ARRAY (0x9dbf480).

cosa significa @ $ ref [0]? non capisco.

+5

Considera di leggere attraverso ['perlol'] (http://perldoc.perl.org/perllol.html) e [' perldsc'] (http://perldoc.perl.org/perldsc.html). Fanno un buon lavoro se spiegano questa roba. –

+1

Il backslash è l'operatore di riferimento, si sta chiamando \ $$ ref [0] e \ @ $ ref [0], si sta dereferenziando e quindi si chiede nuovamente un riferimento, quasi sicuramente non si intende farlo. –

risposta

10

$ref = [11, 22, 33, 44]; è un riferimento a un array anonimo.

$$ref[0] o ${$ref}[0] o $ref->[0] è il dereferenziamento dell'array e il recupero del primo elemento.

@$ref[0] o @{$ref}[0] sta deferendo la matrice e ottenendo una sezione di matrice che contiene solo il primo elemento.

4

Innanzitutto, @$ref[0] è diverso da \@$ref[0]. Hai il primo nella tua sessione di debug e il secondo nel tuo script.

In ogni caso, @$ref[0] indica la stessa cosa di @{$ref}[0]. Se si disponesse di un array denominato @ref, @ref[0] sarebbe l'equivalente. Sta usando la notazione delle sezioni per ottenere il primo elemento dell'array.

La differenza tra @array[$x] e $array[$x] è che nel primo è possibile specificare più di un indice e recuperare una raccolta di elementi dall'array, anziché solo uno. Ma se metti solo un indice tra parentesi, ottieni lo stesso risultato.