• Publicidad

Concatenar string y variables sin saltos de línea

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

Concatenar string y variables sin saltos de línea

Notapor lacris » 2016-04-19 02:44 @156

Hola, buenos días.

Estoy tratando de enviar un mensaje (a través de CGI) con un enlace, pero el enlace no me llega correctamente al buzón.

El enlace lo monto de la siguiente manera:

my $enlace = " https://www.servidor.com/directorios/ca ... dimientos_" . $ano . "/" . $expediente . ".zip";

Siendo

my $ano=`date +%Y`;

y

$expediente = $query->param("expediente");

bueno, pues el mensaje me llega:

--------------------------
Puede descargarlos en este enlace: https://www.servidor.com/directorios/ca ... entos_2016
/
2015_0439_12_4565.zip
---------------------------------

Es decir, me lo "desmonta" en tres líneas y no sé por qué.

¿Alguien puede ayudarme?
¡Gracias!
Cristina
lacris
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-04-18 10:38 @484

Publicidad

Re: Concatenar string y variables sin saltos de línea

Notapor explorer » 2016-04-19 15:48 @700

Bienvenido a los foros de Perl en Español, Cristina.

El primer avance de línea es fácil de entender: lo devuelve el comando `date`. Lo que no entiendo es de dónde puede venir el segundo.

Para evitar el primer avance de línea, puedes pedir a Perl que sea él mismo el que calcule el año:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ano        = 1900 + (localtime)[5];
  2. my $expediente = $query->param("expediente");
  3. my $enlace     = "https://www.servidor.com/directorios/carpeta/procedimientos_$ano/$expediente.zip";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Si sigue saliendo el avance de línea en $expediente, pues hay que quitarlo.

Aún más. Como se trata de algo que nos manda el usuario, es mejor hacer una labor de "extraer" aquello que buscamos, de aquello que nos mandan (nos pueden mandar cualquier cosa, incluso intentar romper nuestro código, pero solo nos quedaremos con lo que estamos esperando).

En tu caso, parece que estás esperando un código numérico, separado en 4 partes unidas por '_'. Y cada parte tiene una determinada longitud.

Bueno, pues aplicamos una expresión regular, con un patrón con unos paréntesis de captura, y listo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my ($expediente) = $query->param("expediente") =~ /(\d{4}_\d{4}_\d{2}_\d{4})/;
  2. if ($expediente) {
  3.     my $ano      = 1900 + (localtime)[5];
  4.     my $enlace   = "https://www.servidor.com/directorios/carpeta/procedimientos_$ano/$expediente.zip";
  5.  
  6.     # enviar
  7. }
  8. else {
  9.     # hubo un error: no se recibió un expediente correcto
  10. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información de localtime(), en perldoc -f localtime
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Concatenar string y variables sin saltos de línea

Notapor lacris » 2016-04-22 04:38 @235

Gracias, explorer.

No había visto tu mensaje y solucioné el tema: no eran saltos de línea sino que, no me digas por qué, ¡tenía espacios en blanco!

Así que lo solucioné con:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $expediente =~ s/\s//g;
  2. chomp($expediente);
  3. my $enlace = "https://www.servidor.com/.../.../.../Procedimientos_$ano/$expediente.zip";
  4. $enlace =~ s/\s//g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡Gracias! Voy a mirar el tema de que me puedan meter otro código.
lacris
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-04-18 10:38 @484

Re: Concatenar string y variables sin saltos de línea

Notapor explorer » 2016-04-22 12:08 @547

Hola.

Las líneas 2 y 4 te sobran.

La línea 2 sobra porque los espacios (incluido el/los caracteres de fin de línea) han sido filtrados en la línea anterior.

Y sobra la línea 4 porque, si sabemos que $ano y $espediente ya están limpios, pues entonces, de la composición de $enlace, estamos completamente seguros que no hay espacios, y por lo tanto, no necesitamos tanta limpieza.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Concatenar string y variables sin saltos de línea

Notapor lacris » 2016-05-12 09:14 @426

¡¡Gracias por los consejos depuradores!! ;-)
lacris
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-04-18 10:38 @484


Volver a Básico

¿Quién está conectado?

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