No se puede abrir el directorio, o lo que es malo en mi código (Perl)?
Pregunta
Tengo un logspath.txt
nombre de archivo que contienen en la ruta del directorio de registros en la máquina.
un directorio de cada línea. Aunque el directorio de existir, Perl decir que no lo hace.
#!/usr/bin/perl -w
open FILE,"logspath.txt" or die $!;
while (<FILE>){
print $_;
opendir ($DIR,chomp($_)) or die $!;
Cuando estoy corriendo el guión me sale:
/home/amosa/
No such file or directory at archive.pl line 6, <FILE> line 1.
Listado del directorio:
~$ ls -l /home/amosa/
total 6
drwxr-xr-x 11 amosa prodapp 1024 Mar 2 12:49 deploy
drwxr-xr-x 2 amosa prodapp 512 Mar 2 12:39 lib
-rw-r--r-- 1 amosa prodapp 787 Mar 2 11:02 s
Cualquier consejo?
Solución
chomp
no devuelve ningún valor significativo que a continuación, puede pasar a opendir
. Es necesario que chomp
la cadena en un comunicado, por encima de la opendir
.
chomp;
opendir DIR, $_ or die ...
Otros consejos
Esto debería ser un comentario pero el código de contabilización en los comentarios no funciona muy bien, así que estoy haciendo CW.
Aquí es cómo escribir este "mejor" para un cierto valor de la mejor:
#!/usr/bin/perl
use strict; use warnings;
my $logs_file = 'logspath.txt';
open my $FILE, '<', $logs_file
or die "Cannot open '$logs_file': $!";
while ( my $dir = <$FILE> ) {
print $dir and chomp $dir;
opendir my $dir_h, $dir
or die "Cannot open directory '$dir': $!";
# do something with $dir_h
}
En resumen, utilizar identificadores de archivos y directorios léxicas, utilice el formulario de tres argumentos de abrir e incluyen el nombre del archivo o directorio que estaba tratando de abrir en el mensaje de error entre comillas o corchetes para ver lo que realmente se pasa a la abierto o opendir llamada.
utilizar estricta; advertencias de uso;
open my $FILE, '<logspath.txt'
or die "Cannot open '$logs_file': $!";
while ( my $dir = <$FILE> ) {
print $dir and chomp $dir;
if( -d $dir)
{
opendir my $dir_h, $dir
or die "Cannot open directory '$dir': $!";
# do something with $dir_h
}
else
{
print " Can't open directory $!\n";
}
}
Aquí "-d" se utiliza para comprobar el directorio está disponible o no. Si comprobamos el directorio es muy útil.