2010-04-23 5 views

Respuesta

13

Sólo Cortar la referencia (la sintaxis es similar a derreferenciándolo, véanse los comentarios), y luego girar a la lista resultante de nuevo en una ref:

my $arr_ref2=[@$arr_ref[0..2]]; 
+1

eso no es lo que hace. '@ $ ref [...]' es un segmento de matriz que utiliza una referencia; no hay una matriz intermedia generada. Ver http://perlmonks.org?node=References+quick+reference – ysth

+1

oh, ¿tal vez por "matriz resultante" te refieres a lo que genera la porción de matriz? Eso no es una matriz, es una lista. – ysth

+0

@ysth: Mi mal, actualizado. – Cascabel

5
my $arr_ref2 = [ @$arr_ref[0..2] ]; 
25

Para obtener una porción que comience con una referencia de matriz, reemplace el nombre de la matriz con un bloque que contenga la referencia de la matriz. He utilizado el espacio en blanco para extender las partes, pero sigue siendo el mismo:

my @slice = @ array [1,3,2]; 
my @slice = @ { $aref } [1,3,2]; 

Si la referencia dentro del bloque es un escalar sencillo (así, no es un elemento de la matriz o de hash o una gran cantidad de código) , se puede dejar fuera de los apoyos:

my @slice = @$aref[1,3,2]; 

Entonces, si quieres una referencia de eso, se puede utilizar la matriz anónima constructor:

my $slice_ref = [ @$aref[1,3,2] ]; 

Con el nuevo post-dereference feature (experimental) in v5.20,

use v5.20; 
use feature qw(postderef); 
no warnings qw(experimental::postderef); 

my @slice = $aref->@[1,3,2]; 
Cuestiones relacionadas