题
我有一个文件名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
任何意见?
解决方案
chomp
没有有意义的返回值,然后可以通过在opendir
。您需要chomp
你的字符串在一个单独的声明中,opendir
以上。
chomp;
opendir DIR, $_ or die ...
其他提示
这应该是一个评论,但邮政代码注释中并没有真正的工作,所以我使它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
}
总之,使用词汇文件和目录手柄,使用的三个参数形式打开一>与包括文件,或者你正试图在包含在引号或括号中的错误信息,打开看看有什么实际传递到的开或执行opendir 一>呼叫。
使用严格; 使用警告;
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”用来检查目录是否可用。如果我们检查该目录是非常有用的。
不隶属于 StackOverflow