首页 文章

打印Perl中目录中的所有文件 - 将不起作用

提问于
浏览
0

所以我是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);

1 回答

  • 4

    这是另一个省略 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 $! ,忘记它不在当前的工作目录中 .

相关问题