Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 需要程序逻辑方面的帮助吗_Perl_File Find - Fatal编程技术网

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的建议发布输入文件的示例。