Non è possibile aprire la directory, o ciò che è sbagliato con il mio (Perl) codice?
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?
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.