Perl 需要程序逻辑方面的帮助吗
我正在尝试读取一个配置文件,并丢弃其中列出的目录,这些目录的大小在文件中提到。到目前为止,我有这个-Perl 需要程序逻辑方面的帮助吗,perl,file-find,Perl,File Find,我正在尝试读取一个配置文件,并丢弃其中列出的目录,这些目录的大小在文件中提到。到目前为止,我有这个- 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 ($
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 $array_size=@line;
**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";
}
}
}
打开文件,'C:\reports\config.txt'或die$!;
我的$size_需求;
我的$path;
我的$sub_dir;
我的$count;
我的@lines=;
foreach$(@行)
{
我的@line=split/\\124;/,$;
如果($line[0]eq“size”)
{
$size_req=$line[1];
$size_req=“>”$size_req*1024;;
}
如果($line[0]eq“path”)
{
$path=$line[1];
}
if($line[0]eq“目录”)
{我的$aa;
我的$siz_两位数;
我的$sub_dir;
我的$i;
我的$array_size=@line;
**对于($i=1;$i<$array\u size;)**
{
$sub_dir=$line[$i];
打印$sub_dir;
打印“\n”;
打印$path;
打印“\n”;
my$r1=文件::查找::规则->目录
->姓名($sub_dir)
->普伦姆,别扯进去
->丢弃;#不要报告
my$fn=文件::查找::规则->文件
->尺寸(尺寸要求);
我的@files=File::Find::Rule->or($r1,$fn)
->在($path);
打印@文件;
undf@files;
打印@文件;
$i++;
打印“\n”;
打印“\n”;
}
}
}
for循环的问题在于-它存储了一个数组中要丢弃的所有子目录。但是,当它读取要丢弃的第一个目录的名称时,它不知道剩余的子目录,也会列出它们。当它转到第二个值时,它会忽略上一个值并列出该值
是否有人知道文件“:::查找::规则一次采取一个数组,以便代码将同时考虑配置文件中的整行”?还是其他逻辑
谢谢此代码与您的想法不符:
my $r1 = File::Find::Rule->directory
->name($sub_dir)
->prune # don't go into it
->discard; # don't report it
您试图将规则存储在标量中,但实际操作是调用Find::File::rule并将结果列表转换为整数(列表中的元素数)并将其存储在$r1中
只需将整个调用放在@files调用中。它可能看起来很凌乱,但工作起来会更好。也许是输入文件格式的示例?我建议您在所有脚本中使用严格的
和使用警告。另外,请按照@LenJaffe的建议发布输入文件的示例。