Kann nicht geöffnet werden Verzeichnis, oder was ist los mit meinem (Perl) Code?
Frage
ich einen Dateinamen logspath.txt
haben, die auf dem logs Verzeichnispfad auf der Maschine enthalten.
ein Verzeichnis jeder Zeile. Obwohl das Verzeichnis vorhanden sein, sagt Perl nicht.
#!/usr/bin/perl -w
open FILE,"logspath.txt" or die $!;
while (<FILE>){
print $_;
opendir ($DIR,chomp($_)) or die $!;
Als ich das Drehbuch renne ich:
/home/amosa/
No such file or directory at archive.pl line 6, <FILE> line 1.
Eintrag im Verzeichnis:
~$ 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
Jede Beratung?
Lösung
chomp
hat keine sinnvolle Rückgabewert, dass Sie dann auf opendir
passieren kann. Sie benötigen eine Zeichenfolge in einer gesonderten Erklärung, über dem chomp
opendir
.
chomp;
opendir DIR, $_ or die ...
Andere Tipps
Dies sollte ein Kommentar aber Posting Code in Kommentaren wird nicht wirklich funktionieren, damit ich es CW machte.
Hier ist, wie für einen Wert von besser diese „besser“ schreiben:
#!/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
}
Kurz gesagt, verwenden lexikalische Datei- und Verzeichnis Griffe, verwenden Sie die drei Argument Form von öffnen und schließen Sie den Namen der Datei oder des Verzeichnisses, das Sie in der Fehlermeldung in Anführungszeichen oder Klammern zu öffnen versuchten, zu sehen, was tatsächlich eine href zur <= "übergeben wurde http://perldoc.perl.org/functions /open.html“rel = "nofollow noreferrer"> open oder opendir Anruf.
use strict; Verwendung Warnungen;
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";
}
}
Hier „-d“ wird verwendet, das Verzeichnis zu überprüfen vorhanden ist oder nicht. Wenn wir das Verzeichnis überprüfen, ist es sehr nützlich.