-2

'users-tb-deleted.txt'ファイルがあります。これは、改行で区切られたユーザーのリストであり、ディレクトリ構造内の約50個のファイルから削除する必要があります。

すべて同じ操作を行う50の異なるファイルハンドル引数を記述せずに、多数のファイルを開き、前のリストを使用して配列に検索と置換を行うにはどうすればよいですか?

現在のコード:

use File::Find;
open(FILE, "$path/delete-list.txt") || die "$!\n";
my @user = <FILE>;
close(FILE);
---
opendir(DIR, "/path/to/dir") || die "$!\n";
@docs= grep(/\.uid$/,readdir(DIR));    
foreach $file {
    open (RES, $file) || die "$!\n";
    while(<RES>){
        foreach $user (@user){
            chomp;
            s/$user//ig;
        }
    }
}

何かアイデア、考え、提案はありますか?

4

2 に答える 2

0
use File::Find;
use Tie::File;

... # define $path and @dirs and &some_condition;

open(FILE, "$path/delete-list.txt") || die "$!\n";
my @user = <FILE>;
close(FILE); 
my $regex = join "|", @user;

find(\&wanted, @dirs);

sub wanted {
    my $full_path = $File::Find::name;
    next if -d $full_path;
    next unless &some_condition($full_path);

    tie my @lines, $full_path or die $!;

    for my $line (@lines) {
        $line =~ s/($regex)//ig;
    }

    untie @lines;
}
于 2013-03-25T22:18:54.583 に答える
0

その点に注意してください

opendir(DIR, "/path/to/dir") || die "$!\n";
@docs= grep(/\.uid$/,readdir(DIR));

としてはるかに読みやすいです

@docs = glob( '/path/to/dir/*.uid' );
于 2013-09-24T13:35:47.737 に答える