Non è possibile aprire la directory, o ciò che è sbagliato con il mio (Perl) codice?

StackOverflow https://stackoverflow.com/questions/2372561

  •  24-09-2019
  •  | 
  •  

Domanda

Ho un file di nome logspath.txt che contengono i registri percorso della directory sulla macchina.una directory di ogni riga.Anche se la directory esiste, Perl dire che non.

#!/usr/bin/perl -w

open FILE,"logspath.txt" or die $!;
while (<FILE>){
   print $_;
   opendir ($DIR,chomp($_)) or die $!;

Quando sono in esecuzione lo script mi esce:

/home/amosa/
No such file or directory at archive.pl line 6, <FILE> line 1.

Elenco directory :

~$ 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

Qualche consiglio?

È stato utile?

Soluzione

chomp non restituisce alcun valore significativo che si può quindi passare sul opendir. È necessario chomp la stringa in una dichiarazione separata, al di sopra della opendir.

 chomp;
 opendir DIR, $_ or die ...

Altri suggerimenti

Questo dovrebbe essere un commento, ma il codice distacco nei commenti in realtà non lavorare così sto facendo esso CW.

Ecco come scrivere questo "meglio" per un valore di meglio:

#!/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
}

In breve, utilizzare handle di file e directory lessicali, usa il modulo di tre tesi di aprire e comprendono il nome del file o directory si è tentato di aprire il messaggio di errore racchiuso tra virgolette o parentesi per vedere che cosa è stato effettivamente passato al aperto o opendir chiamata.

usare rigoroso;utilizzare le avvertenze;

    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";
}
}

Qui "-d" è utilizzato per controllare la directory è disponibile o meno.Se andiamo a vedere la directory è molto utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top