2
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;
}

エラーはコードにありますpush(@files); エラーは次のとおりです。 Useless use of push with no values

.htm正規表現を使用して、または配列.html内で終わる名前のファイルを処理したいのですが、助けてください。@files/\.htm/

4

3 に答える 3

5

これを解決する最も簡単な方法は、grepビルトインを使用することです。リストから条件が真である要素を選択し、一致するすべての要素のリストを返します。

my @even = grep { $_ % 2 == 0 } 1 .. 10; # even number in the interval [1, 10].

私たちの場合、できること

my @files = grep { /\.htm/ } readdir $dh;

を使用する場合はpush、(a) 配列にプッシュするものを指定する必要があり、(b)正規表現が一致している間ではなく、一致する場合にのみプッシュを行う必要があります。

for my $file (@all_files) {
  push @files, $file if $file =~ /\.htm/;
}
于 2013-05-03T08:33:37.833 に答える
0

以下のコードを理解してください。これは .htm または .html ファイルのみを処理します。

use strict;
use Data::Dumper;

my @all_files = ("abc.htm", "xyz.gif", "pqr.html") ;
my @files;
foreach my $files(@all_files){
    if($files =~ /\.html?/){ # This will process only .htm or .html files
        push(@files, $files);
    }
}
print Dumper(\@files);

出力:

$VAR1 = [
          'abc.htm',
          'pqr.html'
        ];
于 2013-05-03T08:44:57.527 に答える