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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top