查找数组中的元素数(Perl)时出错?

时间:2013-03-15 15:26:29

标签: arrays perl hashtable

我是Perl和Linux的新手。我试图在Perl中编写一个程序来查找数组中的元素数。 (这个数组应该由当前目录中扩展名为“.txt”的文件组成。然后我计划使用这个数组将所有“.txt”文件读入一个哈希值。)但是,我不断得到一个数组大小= 0.我知道我的目录中有超过8个“.txt”文件,所以我不会有超过8个数组元素吗?

我的计划如下:

    #!/user/bin/perl
    my $readfdir = '.';
    opendir(DIR, $readfdir) or die $!;
    my @readf = glob(".*.txt");
    my $arrSize = @readf;
    print "array size = $arrSize\n";

请指导我做错了什么。谢谢!

4 个答案:

答案 0 :(得分:5)

你的全球化很可能不是你的想法

my @readf = glob(".*.txt");

你正在使用看起来像正则表达式语法的东西,即.*来匹配任何字符串,但是在一个glob中,即*。所以它应该是:

my @readf = glob("*.txt");

另外,如果使用glob代替,那么你的opendir语句是多余的。使用opendir / readdir或glob。

答案 1 :(得分:1)

glob(".*.txt");

你有一个“。”在文件名的开头,你确定你的目录中有这样的文件吗?

答案 2 :(得分:0)

更改您的glob规范。

use warnings;
use strict;

my @readf = glob("*.txt");
my $arrSize = @readf;
print "array size = $arrSize\n";

此外,不需要opendirglob

答案 3 :(得分:0)

这是一个不使用glob的解决方案。

my $dir = ".";
my @list_of_files;

opendir(my $dh, $dir) or die "$!";
for my $file (readdir $dh){
    push(@list_of_files, $file) if
        $file =~ /\.txt$/;
}

print join(' ', @list_of_files), "\n";
print "Number of files: ", scalar(@list_of_files), "\n";

另外,我相信您的示例中不需要readdir。例如。你可以glob

此示例还将仅扫描给定目录中的txt文件。如果您想查找给定目录下方的所有内容,File::Find非常棒。