Bienvenido a los foros de Perl en Español, kordlhesh.
Pues sí que es extraña la situación...
En efecto, la variable dentro de la cadena de caracteres no debería dar problemas. Y de hecho, yo no veo problemas en ninguna parte del código.
Ahora bien... cuando ejecutas un qx() lo que estás haciendo es llamar al shell para que ejecute otro programa con una serie de argumentos... y es en ese momento cuando los argumentos pueden quedar afectados por la interpretación del shell (caso de tener comodines, espacios en blanco, cosas así. Pero veo que no es tu caso.
¿Estamos seguros que el problema es
$lista_out? ¿Lo recibe bien script1.pl? ¿Qué errores da?
Algo que puedes hacer sin problemas es editar script1.pl, ir a las primeras líneas del código y poner algo como esto:
Using perl Syntax Highlighting
#!/usr/bin/perl
print "[" . join("][" => @ARGV) . "]";
exit;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Es decir, que queremos que formatee los argumentos que recibe poniéndolos entre corchetes, los mande a la salida estándar, y que el programa termine. La salida será capturada por el qx() de tu programa, y lo sacarás en pantalla. Así verás qué es lo que realmente está recibiendo script1.pl.
Por ejemplo, yo he hecho una versión moderna de tu código y le he añadido la impresión del resultado:
Using perl Syntax Highlighting
#!/usr/bin/env perl
use v5.10;
use strict;
use warnings;
my $lista_ref = "listas/lista_referencia.list";
for my $i (2 .. 10) {
my $lista_out = sprintf("listas/lista_resultados_%.1f.list", $i);
#say "OUT: [$lista_out]";
my $info_out = qx(perl tools/script1.pl -R $lista_ref -S $lista_out) or die "Error en qx()";
say "RES: [$info_out]";
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Y este es el script que recibe la llamada:
Using perl Syntax Highlighting
#!/usr/bin/env perl
print "[" . join("][" => @ARGV) . "]";
exit;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Esta es la salida:
Using text Syntax Highlighting
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_2.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_3.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_4.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_5.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_6.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_7.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_8.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_9.0.list]]
RES: [[-R][listas/lista_referencia.list][-S][listas/lista_resultados_10.0.list]]
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Observa en las líneas RESultado cómo los corchetes van separando los argumentos. El contenido de $lista_out está correcto, así que mi shell no ha hecho nada raro con él.
Entonces, si tu programa emite los argumentos de forma correcta, y script1.pl los recibe también de forma correcta, quiere decir que es en el propio script1.pl donde está el fallo a la hora de trabajar con ellos.
Tendrás que poner controles dentro de script1.pl.
Veo que son archivos. ¿script1.pl sabe llegar a ellos?