2011-11-07 20 views
9

consideran este código:¿Cómo convierto una matriz devuelta desde una función (como división) en una referencia de matriz?

@tmp = split(/\s+/, "apple banana cherry"); 
$aref = \@tmp; 

Además de ser poco elegante, el código anterior es frágil. Digo lo sigo con esta línea:

@tmp = split(/\s+/, "dumpling eclair fudge"); 

Ahora $$aref[1] es "Eclair" en lugar de "banana".

¿Cómo puedo evitar el uso de la variable de temperatura?

Conceptualmente, estoy pensando en algo así como

$aref = \@{split(/\s+/, "apple banana cherry")}; 
+4

Las funciones no pueden devolver matrices. 'split' devuelve una lista de escalares, como cualquier sub. – ikegami

Respuesta

19

Usted puede hacer esto si quieres una gran variedad de ref:

my $aref = [ split(/\s+/, "apple banana cherry") ]; 
3

lo he descubierto:

$aref = [split(/\s+/, "apple banana cherry")]; 
2

Aunque me gusta la respuesta de mu (y usaría primero ese enfoque), tenga en cuenta que las variables pueden ser fácilmente delimitadas, incluso sin ut el uso de funciones, imagina:

my $aref = do { 
    my @temp = split(/\s+/, "apple banana cherry"); 
    \@temp; 
}; 
print join("-", @$aref), "\n"; 
# with warnings: Name "main::temp" used only once: possible typo at ... 
# with strict: Global symbol "@temp" requires explicit package name at ... 
print join("-", @temp), "\n"; 

Happy coding.

Cuestiones relacionadas