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);
お礼
返答ありがとうございます。 >unless $dir eq '.' || $dir eq '..'; よくよく考えてみたら、 if($dir ne "." && $dir ne ".."){ でも良いわけですよね。 ヒントありがとうございました。