0

我正在尝试用 Perl 编写一个程序来查找数组中元素的数量。(这个数组应该由.txt当前目录中带有“”扩展名的文件组成。然后我计划使用这个数组将所有“ .txt”文件读入哈希。)但是,我一直得到一个数组大小 = 0。我知道.txt我的目录中有超过八个“”文件,那么我不会有超过八个数组元素吗?

我的程序如下:

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

4 回答 4

5

你的 glob 很可能不是你想的那样

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

您正在使用看起来像正则表达式的语法,即.*匹配任何字符串,但在全局中,即*. 所以应该是:

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

此外,如果您使用 glob 代替,您的 opendir 语句是非常多余的。使用 opendir/readdir 或 glob。

于 2013-03-15T15:30:35.723 回答
1
glob(".*.txt");

你有一个“。” 在文件名的开头,您确定目录中有以这种方式命名的文件吗?

于 2013-03-15T15:30:02.883 回答
0

更改您的全局规范。

use warnings;
use strict;

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

此外,不需要opendirglob

于 2013-03-15T15:30:17.580 回答
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太好了。

于 2013-03-15T15:46:14.870 回答