• Publicidad

Problema al leer directorio con readdir

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Problema al leer directorio con readdir

Notapor danimera » 2012-06-14 20:53 @911

Resulta que tengo este código
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   opendir(my $dh, $some_dir) || die "can't opendir $some_dir: $!";
  2.  
  3.         #@dirs = grep { /^\./ && -f "$some_dir/$_" } readdir($dh);
  4.         #Se lee el directorio
  5.             while(readdir $dh) {
  6.  
  7.             #Pongo en directorio si, el archivo no es un fichero y el directorio no tiene . o ..
  8.                 push (@dirs,$_) if (! -f "$some_dir/$_"  && ! /^\./);
  9.  
  10.             }
  11.             closedir $dh;
  12.  
  13.         return Dumper @dirs;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

cuando lo ejecuto en Windows me muestra los directorios, pero cuando lo ejecuto en el hosting en Linux no me saca nada, aunque parece que sí recorre los ficheros.

En Windows el mismo directorio tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $VAR1 = 'cleany_blue'; $VAR2 = 'cleany_green'; $VAR3 = 'default'; $VAR4 = 'modern'; $VAR5 = 'talabary';  


y en el hosting:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $VAR1 = undef; $VAR2 = undef; $VAR3 = undef; $VAR4 = undef; $VAR5 = undef; $VAR6 = undef; $VAR7 = undef; 



Y tienen los permisos 755
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Problema al leer directorio con readdir

Notapor explorer » 2012-06-15 03:52 @203

El problema es que estás usando versiones Perl distintas.

Sí que es cierto que readdir() está haciendo su trabajo (recorrer el directorio), pero lo que es distinto entre las versiones Perl del alojamiento y de tu casa, es que readdir() devuelva su resultado (el nombre del archivo) en la variable $_.

De la documentación de readdir():
readdir IDENTIFICADOR_DIR

Devuelve la siguiente entrada de directorio de un directorio abierto con "opendir". Si se usa en contexto de lista, devuelve el resto de las entradas en el directorio. Si no hay más entradas, devuelve el valor indefinido en el contexto escalar y la lista vacía en el contexto de lista.

Si está planeando hacer test de archivos de los valores retornados por un "readdir", más le vale anteponer el directorio en cuestión. De lo contrario, porque no hicimos un "chdir" antes, se estará probando en un archivo incorrecto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                opendir(my $dh, $algun_dir) || die "no puedo opendir $algun_dir: $!";
  2.                @dots = grep { /^\./ && -f "$algun_dir/$_" } readdir($dh);
  3.                closedir $dh;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

A partir de Perl 5.11.2 puede usar un simple "readdir" en un bucle "while", que actualizará $_ en cada iteración.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                opendir(my $dh, $algun_dir) || die;
  2.                while(readdir $dh) {
  3.                    print "$algun_dir/$_\n";
  4.                }
  5.                closedir $dh;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El mismo lugar dice que es recomendable poner al principio del programa

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    use 5.012; # así readdir asigna a $_ en un solitario test de un while
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Entonces... puedes poner el use v5.12; si estás seguro que en el alojamiento tienen un Perl igual o superior a v5.12. Si no, te tocará cambiar la línea del while().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema al leer directorio con readdir

Notapor danimera » 2012-06-15 16:26 @726

Prefiero cambiar la línea de while() :P
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados