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.
Using perl Syntax Highlighting
opendir(my $dh, $algun_dir) || die "no puedo opendir $algun_dir: $!";
@dots = grep { /^\./ && -f "$algun_dir/$_" } readdir($dh);
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.
Using perl Syntax Highlighting
opendir(my $dh, $algun_dir) || die;
while(readdir $dh) {
print "$algun_dir/$_\n";
}
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
Using perl Syntax Highlighting
use 5.012; # así readdir asigna a $_ en un solitario test de un whileColoreado 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().