opendirで複数のディレクトリ呼び出しの簡素化
下記のように複数のディレクトリから.datファイルのみの
数を集計して書き出したいのですが簡素化する記述方法を教えてください。
他のプログラムをコピーしたので集計に関係ない記述が
あるかもしれません。よろしくお願いします。
my $kazu1 = 0;
my (@temp1,@temp2,%z1,$a1,$a2);
opendir(DIR,'./a/kazu/');
while ($a1 = readdir(DIR)){
if ($a1 =~ /(.*)\.dat/i){
$a1=$1;
$kazu1++;
if (($searchkey eq "0") || ($searchkey eq "1")){push(@temp1,$a1);}
elsif (($searchkey eq "2") && ($a1 =~ /^[0-9]/)){push(@temp1,$a1);}
elsif ($a1 =~ /^$searchkey/i){push(@temp1,$a1);}
}
}
closedir(DIR);
my $kazu2 = 0;
my (@temp1,@temp2,%z1,$a1,$a2);
opendir(DIR,'./b/kazu/');
while ($a1 = readdir(DIR)){
if ($a1 =~ /(.*)\.dat/i){
$a1=$1;
$kazu2++;
if (($searchkey eq "0") || ($searchkey eq "1")){push(@temp1,$a1);}
elsif (($searchkey eq "2") && ($a1 =~ /^[0-9]/)){push(@temp1,$a1);}
elsif ($a1 =~ /^$searchkey/i){push(@temp1,$a1);}
}
}
closedir(DIR);
my $kazu3 = 0;
my (@temp1,@temp2,%z1,$a1,$a2);
opendir(DIR,'./c/kazu/');
while ($a1 = readdir(DIR)){
if ($a1 =~ /(.*)\.dat/i){
$a1=$1;
$kazu3++;
if (($searchkey eq "0") || ($searchkey eq "1")){push(@temp1,$a1);}
elsif (($searchkey eq "2") && ($a1 =~ /^[0-9]/)){push(@temp1,$a1);}
elsif ($a1 =~ /^$searchkey/i){push(@temp1,$a1);}
}
}
closedir(DIR);
$kazu= ($kazu1+$kazu2+$kazu3);
print($kazu);
お礼
拡張しでチェックできるんですか! それすらも知りませんでしたorz 本当にありがとうございました