Da igual que sea zip, rar, pdf o cualquier otra cosa. Para Perl, son archivos normales y corrientes. No miran en su interior (salvo que uses un módulo específico para ellos).
Si el operador '-s' devuelve cero, puede ser por que
- realmente el archivo tenga un tamaño cero. O si estás en Windows, el sistema operativo no lo ha cerrado del todo, y no te deja acceder a él. Aunque tú puedas verlo en el gestor de archivos, el sistema lo puede estar ocupando (por ejemplo, cuando en Windows abrimos un zip como si fuese una carpeta para ver su contenido)
- $archivo, realmente, no apunta (su ruta) al archivo que queremos analizar (está en un sitio distinto de en donde estamos mirando).
- realmente, no es un archivo. Podría ser un enlace o vínculo.
Comprueba que estás accediendo de forma correcta haciendo una prueba '-e' (el archivo existe) y '-f' (es un archivo normal).
Using perl Syntax Highlighting
use utf8;
my $tamaño_archivo;
if (-e $archivo) {
if (-f $archivo) {
$tamaño_archivo = -s $archivo;
}
else {
die "ERROR: [$archivo] no es un archivo normal.\n";
}
}
else {
die "ERROR: no existe el archivo [$archivo].\n";
}
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
(nota de eficiencia: puedes sustituir el segundo '-f $archivo' por '-f _'. Esto está explicado en
perldoc -f -X:
Si a cualquiera de los test de archivo (o cualquiera de los
operadores "stat" o "lstat") se les da el identificador de archivo
especial consistente en un solitario guión bajo, entonces se usa
la estructura stat del archivo del test anterior (o el operador
"stat"), ahorrando una llamada del sistema. (Esto no funciona con
"-t", y necesita recordar que "lstat()" y "-l" dejarán valores en
la estructura stat del enlace simbólico, no del archivo real).
(También, si la memoria intermedia de stat se rellenó con una
llamada "lstat", "-T" y "-B" se reinicializarán con los resultados
de "stat _"). Ejemplo: