打印 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 strictuse 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` 不起作用

删除IE10中的输入类型文件不起作用

使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用[重复]

iPhone中的简单php帖子不起作用

.htaccess 拒绝所有-> 目录索引不起作用(拒绝所有和白名单文件)