我是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";
请指导我做错了什么。谢谢!
答案 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";
此外,不需要opendir
和glob
。
答案 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
非常棒。