Kann nicht geöffnet werden Verzeichnis, oder was ist los mit meinem (Perl) Code?

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

  •  24-09-2019
  •  | 
  •  

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top