我有一个文件名logspath.txt
,它包含在计算机上的logs目录路径中。
每行一个目录。虽然该目录存在,但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
有什么建议吗?
答案 0 :(得分:10)
chomp
没有任何有意义的返回值,您可以将其传递到opendir
。您需要在chomp
上方的单独语句中opendir
字符串。
chomp;
opendir DIR, $_ or die ...
答案 1 :(得分: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来电的内容。
答案 2 :(得分:-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”用于检查目录是否可用。如果我们检查目录它是非常有用的。