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:
Using perl Syntax Highlighting
my $ano = 1900 + (localtime)[5];
my $expediente = $query->param("expediente");
my $enlace = "https://www.servidor.com/directorios/carpeta/procedimientos_$ano/$expediente.zip";
Coloreado en 0.003 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.
Using perl Syntax Highlighting
my ($expediente) = $query->param("expediente") =~ /(\d{4}_\d{4}_\d{2}_\d{4})/;
if ($expediente) {
my $ano = 1900 + (localtime)[5];
my $enlace = "https://www.servidor.com/directorios/carpeta/procedimientos_$ano/$expediente.zip";
# enviar
}
else {
# hubo un error: no se recibió un expediente correcto
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Más información de localtime(), en
perldoc -f localtime