sub open_directory {
my $directory = shift @_;
my @files = ();
opendir (my $dh, $directory) or die "Couldn't open dir '$directory' : $!";
my @all_files = readdir $dh;
closedir $dh;
foreach my $files(@all_files){
while($files =~ /\.htm/){
push(@files);
}
}
return @files;
}
Run Code Online (Sandbox Code Playgroud)
错误在代码push(@files);
错误是:
Useless use of push with no values
我想使用正则表达式来处理名称结尾.htm或.html在@files数组中的文件,/\.htm/请帮助我.
解决这个问题的最简单方法是使用grep内置函数:它从条件为真的列表中选择那些元素,然后返回所有匹配元素的列表.
my @even = grep { $_ % 2 == 0 } 1 .. 10; # even number in the interval [1, 10].
Run Code Online (Sandbox Code Playgroud)
在我们的例子中,我们可以做到
my @files = grep { /\.htm/ } readdir $dh;
Run Code Online (Sandbox Code Playgroud)
如果你想使用push的话(一)已指定要推到阵列上的东西,和(b)只应做推,如果正则表达式匹配,而不是当它匹配:
for my $file (@all_files) {
push @files, $file if $file =~ /\.htm/;
}
Run Code Online (Sandbox Code Playgroud)