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 我可以在数组中收集find(\&;wanted,@目录)的输出吗_Perl - Fatal编程技术网

Perl 我可以在数组中收集find(\&;wanted,@目录)的输出吗

Perl 我可以在数组中收集find(\&;wanted,@目录)的输出吗,perl,Perl,我正在编写一个脚本,它将遍历目录(也包括subdir),并将所需的文件推送到一个数组中,以便我可以处理每个文件 这是我的密码: use strict; use warnings; use File::Find; my $path = $ARGV[0]; find({ wanted => \&GetappropriateFile }, $path); sub GetappropriateFile { my $file = $_; my @all_file; # prin

我正在编写一个脚本,它将遍历目录(也包括subdir),并将所需的文件推送到一个数组中,以便我可以处理每个文件

这是我的密码:

use strict;
use warnings;
use File::Find;

my $path = $ARGV[0];
find({ wanted => \&GetappropriateFile }, $path);

sub GetappropriateFile
{
  my $file = $_;
  my @all_file;
 # print "$file\n";
  if ( -f and /traces[_d+]/)
  {
   #print "$file\n";
     open(my $fh, "<", $file) or die "cannot open file:$!\n";
      while( my $line = <$fh>){
      $line =~ /Cmd\sline:\s+com.android*/;
      push(@all_file,$file);
      #print "$file\n";
    }
close($fh);
#print"@all_file\n";
  }

 } 
使用严格;
使用警告;
使用File::Find;
my$path=$ARGV[0];
查找({wanted=>\&getpropertefile},$path);
子文件
{
我的$file=$\uux;
我的@all_文件;
#打印“$file\n”;
if(-f和/道[_d+]/)
{
#打印“$file\n”;

打开(my$fh),将
@all_文件的声明置于函数外部,并在
find()完成后使用它

my @all_file;
sub GetappropriateFile
{
  .. 
}
您也可以在成功匹配后停止文件读取

if ($line =~ /Cmd\sline:\s+com.android*/) {
  push(@all_file, $file);
  last;
}

最好避免全球VAR

use strict;
use warnings;
use File::Find qw( find );

sub IsAppropriateFile {
  my ($file) = @_;
  if (-f $file && $file =~ /traces[_d+]/) {
    open(my $fh, "<", $file) or die "cannot open file:$!\n";
    while ( my $line = <$fh> ) {
      if ($line =~ /Cmd\sline:\s+com.android*/) {
        return 1;
      }
    }
  }

  return 0;
} 

{
  my $path = $ARGV[0];
  my @matching_files;
  find({
    wanted => sub {
      push @matching_files, $_ if IsAppropriateFile($_);
    },
  }, $path);

  print("$_\n") for @matching_files;  # Or whatever.
}
使用严格;
使用警告;
使用文件::Find qw(Find);
子文件不适当{
我的($file)=@;
如果(-f$file&&$file=~/traces[\u d+]/){

打开(我的$fh,“这里我的问题是,我可以在每个文件上迭代一个我的一个吗?如果是,那么如何迭代?@Maverick在遍历
find()
之后,你可以使用
@all_file
。是否真的需要使用花括号?我是说第20行和第31行。@Maverick“花括号”–是的,它们在这里是有意义的,因为它们限制了
$path
@匹配的_文件
变量的可见性。它们不是必需的,但这是一种很好的做法(Perl具有块范围,因此它们的可见性在右括号处结束)@Maverick,答案的全部要点是显示收集名称的变量如何不必是全局变量,因此卷曲与答案相关,因为它们突出了这一点。(我个人在我的程序中总是使用它们,原因有很多。)@ikegam..我收到了这个错误“匿名哈希中的奇数元素”当我搜索这个错误时,我知道“want=>sub{”是我们正在做的事情wrong@Maverick,我丢失了一个“}”,而您将其添加到了错误的位置。已修复。