설정 파일을 읽고 파일에 언급 된 크기로 나열된 디렉토리를 삭제하려고합니다. 지금까지 나는 for 루프와 this-프로그램 로직에서 도움이 필요합니다.
open FILE, 'C:\reports\config.txt' or die $!;
my $size_req;
my $path;
my $sub_dir;
my $count;
my @lines = <FILE>;
foreach $_ (@lines)
{
my @line = split /\|/, $_;
if ($line[0] eq "size")
{
$size_req= $line[1];
$size_req= ">".$size_req*1024;;
}
if ($line[0] eq "path")
{
$path= $line[1];
}
if ($line[0] eq "directories")
{ my $aa;
my $siz_two_digit;
my $sub_dir;
my $i;
my [email protected];
**for($i=1; $i < $array_size;)**
{
$sub_dir=$line[$i];
print $sub_dir;
print "\n";
print $path;
print "\n";
my $r1 = File::Find::Rule->directory
->name($sub_dir)
->prune # don't go into it
->discard; # don't report it
my $fn = File::Find::Rule->file
->size($size_req);
my @files = File::Find::Rule->or($r1, $fn)
->in($path);
print @files;
undef @files;
print @files;
$i++;
print "\n";
print "\n";
}
}
}
문제를이 모든 하위 디렉토리가 잘 배열에서 폐기 될 저장 독일인의되어 있습니다. 그러나 삭제할 첫 번째 디렉토리의 이름을 읽을 때 나머지 하위 디렉토리에 대해 알지 못하고 목록도 표시됩니다. 두 번째 값으로 이동하면 이전 값을 무시하고 그 값도 나열합니다.
File | :: Find :: Rule이 한 번에 배열을 가져 와서 코드가 구성 파일의 전체 행을 한꺼번에 고려하는지 알 수 있습니까? 또는 다른 논리?
my $r1 = File::Find::Rule->directory
->name($sub_dir)
->prune # don't go into it
->discard; # don't report it
당신은 스칼라의 규칙을 저장하기 위해 노력하고있다,하지만 당신이 실제로하고있는 것은 찾기 호출 :: 파일 :
이 코드는 당신이 생각하지 않는 당신에게
아마도 입력 파일 형식의 샘플입니까? –
모든 스크립트에서'use strict'와'use warnings'을 권합니다. 또한 @LenJaffe가 제안한대로 입력 파일의 샘플을 게시하십시오. – simbabque