• Publicidad

Tomar valores de array[0..-2]

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Tomar valores de array[0..-2]

Notapor creating021 » 2007-07-24 16:50 @743

:shock: Bueno, me topé con un problema que no tratan en Learning Perl. Es el siguiente:

Yo sé que para tomar el último valor de un array se usa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$ultimo = $array[-1];
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
¿Pero qué tal si yo quiero tomar todos los elementos de un array que van del último al penúltimo?

Bueno pensé en algo como:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@elementos = $array[0..-2]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero no obtengo buenos resultados; si a @array le asigno como elementos 0 al 100 y uso este método @elementos imprime 1:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use strict;
my @array = (0..100);
my @elementos = $array[0..-2];
print join "\n", @elementos;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Por qué pasa esto y cómo lo puedo arreglar?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor explorer » 2007-07-24 18:39 @818

Yo creo que pasa lo siguiente: Perl cree que el rango en realidad es un biestable. En la ejecución, como el valor de ejecución del biestable es verdadero, la sentencia se transforma en $array[1], por lo que te devuelve el 1 que está en la segunda posición del array.

Hay algo mal: si quieres obtener más de un valor de un array, debes colocar el sigil '@' delante del nombre de la variable. Si pones un '$', quiere decir que sólo quieres un valor.

Y la expresión de rango siempre va en orden creciente, así que 0..-2 tampoco es válido.

La expresión para obtener los dos últimos valores del array, entonces es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @elementos = @array[-2 .. -1];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Pero además, pides obtener los valores primero el último y luego el penúltimo, así que hay que darles la vuelta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @elementos = reverse @array[-2 .. -1];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2007-07-24 20:12 @883

Hola:

No entiendo porque usar un rango si solamente quieres agarrar el último elemento seguido del penúltimo, mejor tomas los dos elementos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @elementos = @array[-1,-2];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor creating021 » 2007-07-25 15:13 @676

Hola.

Muchas gracias por las respuestas :D
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados