Problema raro con Perl y comprobación de existencia de fichero.

Iniciado por Ariath, 22 Junio 2009, 16:26 PM

0 Miembros y 1 Visitante están viendo este tema.

Ariath

Bueno, antes que nada... he tratado de hacer una búsqueda, pero al buscador no parece gustarle como me expreso, porque aunque la busqueda era: perl system "if (-e" , me dice que no es suficientemente específica... me pregunto qué acepta el buscador, pero en fin...

Al lio, resulta que estoy desarrollando un script en Perl para montar facilmente un servidor MaNGOS.

El script, entre otras cosas, llama a programas externos (por ejemplo: no incluyo en el "paquete" GIT, por que ocupa lo suyo, pero si incluyo GIT portable comprimido, el cual pesa unos 10 MB. Luego, el programa 7zip (7za.exe), se encarga de descomprimir el fichero GIT.7z), y uno de los que es llamado, es el compilador de Visual C++ (para ser más específicos, llamo a devenv.com, al cual le paso como parámetros /Rebuild Release y la ruta de la solución.

El problema que tengo es el siguiente: Antes de ejecutar cada función (una se encarga de descomprimir GIT, otra de usarlo para descargar las fuentes de MaNGOS, otra se encarga de las compilaciones, etc...), realizo una comprobación tal que así:
Código (perl) [Seleccionar]

unless (-e $PATHDEPROGRAMA){
print "Mensaje de error\n";
}

de manera que dicha función solo se ejecute si el programa que tiene que lanzar existe. Pues bien, esto funciona de fábula con todos los programas comprobados (git.exe, svn.exe ...), EXCEPTO UNO, el devenv.com.

Tengo en una variable llamada $VCPATH la ruta exacta al ejecutable devenv.com, tal que así:

$VCPATH = "\"C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\devenv.com\"";

y lo raro es que, cuando hago la comprobación de existencia:
Código (perl) [Seleccionar]

unless (-e $VCPATH){
die "ERROR: Visual Studio no está instalado";
}


se me dispara el die, aún cuando el fichero indicado en $VCPATH existe.

Y para rematar el caso... si quito la comprobación, e intento usar el system para lanzar el $VCPATH con los parámetros que proceden... el programa funciona, se inicia la compilación perfectamente.


Luego aquí me estoy volviendo loco tratando de averiguar que narices pasa, es decir: ¿Porqué Perl se obstina en decirme que un determinado fichero no existe, cuando es patente que SÍ existe?.

Para más información, uso Windows 7 RC1, y por si acaso, con el UAC desactivado.

Salu2, a ver si le encontrais explicación, porque yo estoy...o_O .

leogtz

Mira, yo no sé nada de PERL, pero, creo que tu problema esta en el backslash '\' del principio, no tienes por que ponerlo, puesto que ya esta C:\, indicando la raiz.

Tengo a "devenv.com" en la ruta:

C:\>dir /b /s devenv.com
C:\Archivos de programa\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com

C:\>


Y para probar la existencia de devenv.com mi código esta asi:
Código (perl) [Seleccionar]
#!/usr/bin/perl
use strict;
use warnings;
my $VCPATH = "C:\\Archivos de programa\\Microsoft Visual Studio 9.0\\Common7\\IDE";
unless (-e $VCPATH)
{
die "ERROR: Visual Studio no está instalado";
}


La salida que da:

C:\>perl pl.pl

C:\>


Es obvio que si encuentra a "devenv.com".

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Ariath

#2
Ostras! o_O

Bueno, yo hasta ayer no conocía Perl, pero se me ocurrió mirar si servía para mis propósitos, y después de descargarmelo (un intalador de nombre Strawberry) y mirar información, pues ya le voy cogiendo el tranquillo mas o menos :) .

Bueno el \" ese que puse delante... lo puse para delimitar la cadena con comillas dobles, dado que no sabía si sin ellas se cogería el path completo o si por el contrario se quedaría la cosa en C:\Archivos .

Por lo que veo, hay 3 cosillas que no conocía, un par de ellas el use strict y el use warning, y bueno, la otra es el empleo de my.

El my, lo he visto en muchos sitios, aunque todavía no se para que se usa.

Voy a probar a poner mi cadena como la tuya, a ver que tal :) .

Salu2 y gracias por la ayuda... y por embellecerme el post con la etiqueta de Codigo, se me había olvidado ponerla XD.


P.D: Jolin que cosas, FUNCIONA! o_O, he cambiado la ruta a:

C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\devenv.com

y ahora me lo detecta el fichero.

Que curioso... este es uno de esos momentos en los que piensas: "¿Pero como puede ser? Estaba seguro que lo había probado todo..."

Te juro que he pensado exactamente eso xD.

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com