• Publicidad

Resumir en una línea este código

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Resumir en una línea este código

Notapor danimera » 2016-07-26 16:49 @742

Hola. Resulta que tengo este código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @atemp = split( /\-/, $d->{ciudad} );
  2. $d->{ciudad} = pop @atemp;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

pero quiero hacerlo en una sola línea, algo como
Sintáxis: [ Descargar ] [ Ocultar ]
  1. $d->{ciudad} = pop (@{ split( /\-/, $d->{ciudad} )}); 

pero no me funciona, hace otra cosa diferente a lo que quiero, que es sacar el nombre de una ciudad que está en un string tipo: xxxx-sadsdas-ciudad o asdas-ciudad, o xxx-zzzz-bbbb-ciudad, es decir el ultimo elemento.

La solución ya la tengo pero quiero hacerla en una sola línea. ¿Será posible?
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Resumir en una línea este código

Notapor explorer » 2016-07-26 17:24 @767

Tú mismo has descrito la solución ;)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $d->{ciudad} = (split /-/, $d->{ciudad})[-1];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Los paréntesis "agrupan" los elementos devueltos por split(), y como entonces es una lista de elementos, podemos acceder a ellos como si fuera un array normal, así que le pedimos que nos dé el último elemento (-1).

Esta notación es típica de otros lenguajes, como Ruby o Python, pero también la tenemos en Perl.

Más información en tu propio ordenador en perldoc perldata, y en la Web (traducido al español), en la sección "Constructores de listas":
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Una lista de valores también se puede indexar como un array normal. Debe escribir la lista entre paréntesis para evitar ambigüedades. Por ejemplo:

# stat devuelve una lista.
$time = (stat($archivo))[8];
Coloreado en 0.000 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados