4

我有一个文件名logspath.txt,它包含在机器上的日志目录路径中。每行一个目录。尽管该目录存在,但 Perl 说它不存在。

#!/usr/bin/perl -w

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

当我运行脚本时,我得到:

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

列出目录:

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

有什么建议吗?

4

3 回答 3

10

chomp没有有意义的返回值,您可以将其传递给opendir. 您需要chomp在单独的语句中将您的字符串放在opendir.

 chomp;
 opendir DIR, $_ or die ...
于 2010-03-03T15:39:55.123 回答
4

这应该是一条评论,但在评论中发布代码并没有真正起作用,所以我将其设为 CW。

以下是如何写这个“更好”以获得更好的价值:

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

简而言之,使用词法文件和目录句柄,使用 open 的三个参数形式,并将您尝试打开的文件或目录的名称包含在引号或括号中的错误消息中,以查看实际传递给open的内容或opendir调用。

于 2010-03-03T15:59:29.807 回答
-1

使用严格;使用警告;

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

这里“-d”用于检查目录是否可用。如果我们检查目录,它非常有用。

于 2010-03-04T05:49:01.267 回答