2010-01-08 26 views

Respuesta

37

¿Quieres

my @slice = @rainbow[0 .. $#rainbow - 5]; 

tener cuidado, 1 es el segundo elemento, no el primero.

+3

en caso de que alguien necesite buscar lo que $ # array significa http://stackoverflow.com/questions/8618858/how-do-dollar-and-number-sign-together-work-in-perl –

+0

Gracias @Chas, funcionó para mí –

18

El operador .. forma un range desde la izquierda a valor correcto - si el derecho es mayor que o igual a la izquierda. Además, en Perl, la indexación de matrices comienza en cero.

¿Qué tal esto?

@slice = @rainbow[0..$#rainbow-5]; 

$#array le da el índice del último elemento de la matriz.

5

De las dos primeras frases de la range operator, documentados en perlop:

binario ".." es el operador de rango, que es en realidad dos operadores diferentes, dependiendo del contexto. En el contexto de la lista, devuelve una lista de recuentos de valores (por encima) del valor izquierdo al valor correcto. Si el valor de la izquierda es mayor que el valor de la derecha, devuelve la lista vacía.

Cuando el código no funciona, descompóngalo para ver qué está pasando. Por ejemplo, podría probar el operador de rango para ver lo que produce:

my @indices = 1 .. -5; 
print "Indices are [@indices]\n"; 

Cuando tienes una lista vacía y se dio cuenta de que hay algo que hacer que usted no entiende, consulte la documentación de lo que está tratando de hacer para comprobar que está haciendo lo que crees que debería estar haciendo. :)

Cuestiones relacionadas