Jue Mar 08, 2007 9:00 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
system() devuelve el resultado de la ejecución, NO la salida de la ejecución. Para esto, debes usar qx();
Otra cosa... para saber la fecha del día, no necesitas programas externos a Perl, sino el propio Perl:
|
|
Jue Mar 08, 2007 9:09 am
|
 |
javierg
Perlero Nuevo

|
Registrado: 17 Oct 2006
Mensajes: 48
|
|
|
|
|
efectivamente,
mucho mas simple y funciona
gracias |
|
Jue Mar 08, 2007 9:58 am
|
 |
javierg
Perlero Nuevo

|
Registrado: 17 Oct 2006
Mensajes: 48
|
|
|
|
|
este valor que devuelve es un entero
hay alguna forma de pasarlo a caracter.
He probado a meterlo en un split, y luego a sacar el valor, pero me falla |
|
Jue Mar 08, 2007 10:14 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
| ¿Puedes poner el código y la salida? |
|
Jue Mar 08, 2007 2:29 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
| javierg escribió: | este valor que devuelve es un entero
hay alguna forma de pasarlo a caracter.
He probado a meterlo en un split, y luego a sacar el valor, pero me falla |
Eso me sonó a "circo, maroma y teatro".....
El contexto de un escalar (aquí menciono contexto como el tipo de dato interno o su representación interna), es reflejado en cómo lo usas:
$a = 5; # Numérico
"$a" # obviamente convierte eso a cadena
"$a" + 5 # valor numérico por tratarse de una operación aritmética
Y lo mismo pasará cuando compares un valor escalar en forma de cadena y en forma numérica.
Si quieres represenaciones específicas lee sobre la función sprintf.
Saludos,
PD. Es necesario leer un poco más sobre aspectos básicos de los tipos de datos en Perl. |
|

Vie Mar 09, 2007 1:07 am
|
 |
javierg
Perlero Nuevo

|
Registrado: 17 Oct 2006
Mensajes: 48
|
|
|
|
|
señores porfavor ....
$dia es un entero, intento pasarlo por un split para sacarlo como carácter,
pero ese valor que me devuelve sigue siendo un entero. |
|

Vie Mar 09, 2007 2:31 am
|
 |
javierg
Perlero Nuevo

|
Registrado: 17 Oct 2006
Mensajes: 48
|
|
|
|
|
Adjunto el código.
| Perl: | $dia = (localtime)[3];
@dia = split/ /, $dia;
while ($i > $j) {
$error = "false";
system ("ls -l /export/home/psaxbck/$almacen[$j] > /tmp/lsCOMP");
open(DIRCOMP, "$Dir_COMP") or die ("no se puede abrir el fichero /tmp/lsCOMP");
while ($linea = <DIRCOMP>) {
#$valor5 = (split " ",$linea)[5];
$valor6 = (split " ", $linea)[6];
$fecha = $valor6;
if ( @dia eq fecha ){
#$error = "true";
#$fallido[$k] = $almacen[$j];
$k++;
}
}
print "el valor de dia es $dia y el valor de fecha es $fecha\n";
#if ($error eq "true") {
print " fallo en el back de $almacen[$j]\n";
}
close(DIRCOMP );
$j++; |
Cuando quito el ultimo if, funciona OK. Pero cuando lo pongo me sale el siguiente error
| Código: |
| Use of uninitialized value in string at pruebabackup.pl line 77, <DIRCOMP> |
Lo de sumar un número a un escalar, o poner comillas a una variable numérica, ya lo probé hace tiempo. Aunque ahora dudo de que en esto venga el problema. |
|

Vie Mar 09, 2007 2:52 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
El problema está aquí:
| Perl: | if ( @dia eq fecha ) { | ¿Qué narices es eso?
Estás comparando un array con un literal, por lo que Perl pasa el array @dia a formato escalar, es decir, nos devuelve la longitud de la lista almacenada en @dia, como un entero.
Pero a continuación, haces una comparación de cadena ('eq') por lo que convierte el entero devuelto antes por el array a un string, y lo compara con fecha, que al ser un literal, lo convierte al string 'fecha' (por lo que, sospecho, debería ser corregido a $fecha, definida una línea antes).
A ver... tu lo que quieres es saber si la $fecha es el día de hoy... entonces, nos podemos olvidar de @dia. Necesitaríamos saber el formato del dato de día que extraemos desde la $linea, pero supongamos que es el mismo que el que nos devuelve localtime (valores de 1 a 31, sin relleno de cero o espacios).
Entonces... el 'if' quedaría así:
| Perl: | if ( $dia eq $fecha ) { | Si el formato de la $fecha es distinto, quizás habrá que hacer la comparación de otra manera...
Pero recuerda... Perl NO tiene variables escalares DISTINTAS para números y para strings. Y un array NO almacena strings, sino listas de escalares (que, ocasionalmente, pueden ser strings o caracteres). |
|

Powered by phpBB © 2001, 2005 phpBB Group
|