2010-08-17 10 views
10

Necesito extraer todos los elementos en una matriz excepto la última y almacenarlos en un escalar para su uso posterior. Al principio, pensé que sería posible usar sectores de matriz, pero parece que no se puede contar hacia atrás. Por ejemplo:perl - ¿cómo extraes todos los elementos de una matriz excepto la última?

my $foo = ($bar[0..-2]); 

o

my $foo = ($bar[-2..0]); 

Cualquier ayuda sería muy apreciada ya que esto está empezando a volver loco, y yo he sido incapaz de encontrar una solución en otro lugar o mediante la experimentación.
Oskar

+1

ITYM '' @ foo' y @bar [...] '. –

Respuesta

16

my $foo = join ',', @bar[0..$#bar-1];

concatena (por comas) todos los elementos de la matriz @bar excepto la última en foo.

Saludos

RBO

+1

gracias por la respuesta rápida, me ha ahorrado mucho tiempo y frustración. –

2
@foo = @bar[0 .. $#foo - 1]; 

Si desea crear una cabeza-rascador:

my @x = (1, 2, 3); 
print "@x[[email protected] .. -2]"; 
2

Esto almacenará todos los elementos de la matriz, a excepción de la última, en un escalar. Cada elemento de la matriz estará separado por un solo espacio.

use strict; 
use warnings; 

my @nums = 1 .. 6; 
my $str = "@nums[0 .. $#nums - 1]"; 
print $str; 

__END__ 

1 2 3 4 5 

¿Realmente no desea almacenar los elementos en otra matriz? Si los almacena en un escalar, puede ser problemático recuperarlos. En mi ejemplo anterior, si algún elemento de la matriz ya tenía un único espacio, no podría reconstruir correctamente la matriz desde el escalar.

+1

gracias por la buena respuesta, pero no, me gustaría guardarlos como un escalar, ya que quiero convertir el "nombre inicial (es) apellido" en "apellido, nombre inicial (es)" y ya he extraído el apellido y he añadido una coma a simplemente no pudo obtener el nombre de pila ni la (s) inicial (es). –

10
my @foo = @bar; 
pop @foo; 

o

my @foo = @bar[ [email protected] .. -2 ]; 

o si está bien para cambiar @bar, simplemente

my @foo = splice(@bar, 0, -1); 
+0

gracias por la respuesta rápida, recordaré los ejemplos para más adelante, podrían ser útiles –

+0

Creo que el pop es un poco mejor que el empalme para eliminar el último elemento :) –

+0

@brian d foy: Creo que tienes razón:) – ysth

Cuestiones relacionadas