打印 Perl 目录中的所有文件 - 不起作用
Posted
技术标签:
【中文标题】打印 Perl 目录中的所有文件 - 不起作用【英文标题】:Printing all files in a directory in Perl - will not work 【发布时间】:2017-10-25 20:25:45 【问题描述】:所以我是 Perl 的新手,并试图简单地打开一个目录,并列出它的所有文件。当我在下面运行这个非常简单的代码尝试打印 /usr/bin 中的所有内容时,它将无法正常工作,无论我尝试什么,我都会一直被告知“无法打开 /usr/bin:没有这样的文件或目录”。
任何帮助将不胜感激!
#!/usr/bin/perl
$indir = "/usr/bin";
# read in all files from the directory
opendir (DIR, @indir) or die "Could not open $indir: $!\n";
while ($filename = readdir(DIR))
print "$filename\n";
closedir(DIR);
【问题讨论】:
@indir
应该是 $indir
。
@Barmar 你是个英雄我不敢相信这是我的错误!
@RyanSaffer:Perl 会告诉你类似的愚蠢错误。始终将use strict
和use warnings
添加到您的代码中。
【参考方案1】:
这里是另一个地方,其中省略了use strict;
和use warnings;
的基本故障排除步骤,它会告诉你究竟出了什么问题。
Global symbol "@indir" requires explicit package name (did you forget to declare "my @indir"?)
当然,您还必须修复一些其他错误(例如 my $indir = '/usr/bin';
)
我还建议 readdir 不太适合这份工作,并倾向于推荐glob
:
#!/usr/bin/env perl
use strict;
use warnings;
my $indir = "/usr/bin";
# read in all files from the directory
foreach my $filename ( glob "$indir/*" )
print "$filename\n";
注意这有什么不同 - 它打印文件的完整路径,并省略了某些东西(如.
和..
),这在我看来更通常有用。尤其是因为另一个真正常见的错误是open my $fh, '<', $filename or die $!
,忘记了它不在当前工作目录中。
【讨论】:
谢谢!这是我的第一个 perl 程序,所以对我来说一切都是新的以上是关于打印 Perl 目录中的所有文件 - 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Perl 控制台:基本命令和 fe_sendauth:没有密码不起作用
Perl:使用 gzip 打开不存在的 gz 文件时,`die` 不起作用