-4

私はPerlスクリプトで2つのことを達成しようとしています。最初のサブディレクトリに異なるユーザーディレクトリがあるファイルがあり、これらの各ユーザーディレクトリには、テキストファイルを含むいくつかのフォルダが含まれています。私は次のようなPerlスクリプトを書き込もうとしています

  1. 各ユーザーのディレクトリを一覧表示します
  2. .txtファイルの総数を取得します

2番目の目的のために私はこのコードを持っています

my @emails = glob "$dir/*.txt";
for (0..$#emails){
    $emails[$_] =~ s/\.txt$//;
}
$emails=@emails;

しかし、$emails0を返しています。何か洞察はありますか?

4

1 に答える 1

2

通常、ディレクトリおよび可能なサブディレクトリ内のファイルを処理する場合、globを使用することはあまり良い考えではありません。はるかに良い方法は、次のようにFile::Findモジュールを使用することです。

use File::Find;

my @emails;

File::Find::find(
    {
        # this will be called for each file under $dir:
        wanted => sub {
            my $file = $File::Find::name;
            return unless -f $file and $file =~ /\.txt$/;
            # this file looks like email, remember it:
            push @emails, $file;
        }
    },
    $dir
);

print "Found " . scalar @emails . " .txt files (emails) in '$dir'\n";
于 2012-10-19T06:43:00.270 に答える