【问题标题】:how to implement File::Find::Rule with grep( @specifiers )如何使用 grep(@specifiers) 实现 File::Find::Rule
【发布时间】:2015-11-12 18:56:39
【问题描述】:
#!/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";

结果:

$ perl ruletest.pl
ARRAY(0x96aa60)

预期结果:

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

现在用“ack”来验证结果:

ack -l localhost /home/user/etc

/home/user/etc/host
/home/user/etc/server

【问题讨论】:

    标签: perl grep


    【解决方案1】:
    1. 我不认为您的意思是将搜索限制为名称以\ 开头并包含. 的文件。删除

      ->name('\*.*')
      
    2. 你希望一次返回所有结果,所以改变

      ->start($dir)
      

      ->in($dir)
      
    3. 您尝试打印@files 的元素没有任何意义。改变

      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);
    

    【讨论】:

    • ` #!/usr/bin/env perl 使用严格;使用警告;使用文件::查找;使用文件::查找::规则;我的 $dir = "/home/user/etc";我的@files = File::Find::Rule->file->grep(qr/localhost/)->start($dir); @files 的 print ("$_\n"); ` $ perl ruletest.pl print (...) 在 ruletest.pl 第 13 行被解释为函数。 File::Find::Rule=HASH(0xe57420)
    • @kamal,这不是我发布的。你引入了两个变化,都错了。
    • 所以 start($dir) 不能用?使用必须使用 in($dir) 吗?我想看看 start($dir) 是否可以工作,因为我需要遍历目录。不知道我做了什么其他错误的改变
    • 当然可以使用start($dir),但它与in($dir)的作用不同。具体来说,它不返回文件列表。阅读文档。
    • @ikegami 您的第 2 点与您在代码中所做的相反。我认为您的意思是颠倒这两行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多