Perl 如何使用grep(@specifiers)实现File::Find::Rule

Perl 如何使用grep(@specifiers)实现File::Find::Rule,perl,grep,Perl,Grep,结果: #!/usr/bin/env perl use strict; use warnings; use File::Find; use File::Find::Rule; my $dir = "/home/user/etc"; my @files = File::Find::Rule->file->name('\*.*')->grep(qr/localhost/)->start($dir); my $ref_array_1 = \@files; print "$

结果:

#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
use File::Find::Rule;

my $dir = "/home/user/etc";
my @files = File::Find::Rule->file->name('\*.*')->grep(qr/localhost/)->start($dir);

my $ref_array_1 =  \@files;
print "$ref_array_1\n";
预期结果:

包含字符串“localhost”的文件列表

现在,为了用“确认”验证结果:

  • 我不认为您的意思是将搜索限制在名称以
    \
    开头并包含
    的文件上。除去

    ack -l localhost /home/user/etc
    
    /home/user/etc/host
    /home/user/etc/server
    
  • 您希望一次返回所有结果,因此请更改

    ->name('\*.*')
    

  • 您试图打印
    @文件
    的元素没有任何意义。改变

    ->in($dir)
    

  • 总的来看,

    print("$_\n") for @files;
    


    ` #!/usr/bin/env perl使用严格;使用警告;使用File::Find;使用File::Find::Rule;my$dir=“/home/user/etc”;my@files=File::Find::Rule->File->grep(qr/localhost/)->start($dir);打印@files;`$perl ruletest.pl打印(…)在ruletest.pl第13行被解释为函数。File::Find::Rule=HASH(0xe57420)@kamal,这不是我发布的内容。您引入了两个更改,它们都是错误的。所以不能使用start($dir)吗?是否必须在($dir)中使用?我想看看start($dir)是否有效,因为我需要遍历目录。不确定我做的其他错误更改是什么当然可以使用
    start($dir)
    ,但它与($dir)中的
    功能不同。具体来说,它不会返回文件列表。阅读文档。@ikegami您的第2点与您在代码中所做的相反。我想你是想颠倒这两条线。
    
    ->in($dir)
    
    my $ref_array_1 =  \@files;
    print "$ref_array_1\n";
    
    print("$_\n") for @files;
    
    my $dir = "/home/user/etc";
    
    my @files = File::Find::Rule->file->grep(qr/localhost/)->in($dir);
    print("$_\n") for @files;
    
    my $dir = "/home/user/etc";
    
    print("$_\n")
       for File::Find::Rule->file->grep(qr/localhost/)->in($dir);