Perl-两个列表匹配元素

时间:2014-08-21 05:57:28

标签: perl

我正在尝试获取jenkins从上一次构建和最新构建更新并存储在perl数组中的文件列表。

现在我有源代码中的文件和文件夹列表,在XXXX \ yyy / ,XXX / TTTT / FFF.txt,...等文件中被视为敏感文件和文件夹.TXT

我希望该脚本应该告诉我这些敏感文件是否属于我更改的文件,如果是,请列出其名称,以便我们可以在开发构建之前与开发团队进行双重检查。

我应该如何实现这一目标,以及如何比较一个路径下的多个文件形成已更改的路径文件。

写在下面的脚本---在jenkins里面调用%workspace @作为参数

这不会给出任何匹配结果。

use warnings;
use Array::Utils qw(:all);

$url = `curl -s "http://localhost:8080/job/Rev-number/lastStableBuild/" | findstr   "started by"`;
$url =~ /([0-9]+)/;

system("cd $ARGV[1]");
@difffiles = `svn diff -r $1:HEAD --summarize`;
chomp @difffiles;
foreach $f (@difffiles) {
    $f = substr( $f, 8 );
    $f = "$f\n";
}

open FILE, '/path/to/file'
     or die "Can't open file: $!\n";

   @array = <FILE>;

  @isect = intersect( @difffiles,  @array );

print @isect;

1 个答案:

答案 0 :(得分:0)

我已经设法使用下面的perl脚本解决了这个问题 -

 sub Verifysensitivefileschanges()
  {
    $count1=0;
    @isect = intersect(@difffiles,@sensitive);
    #print "ISECT=@isect\n";
    foreach $t (@isect)
    {  
      if (@isect) {print "Matching element found -- $t\n"; $count1=1;}

    }
      return $count1; 
}

 sub Verifysensitivedirschanges()
 {
    $count2=0;
    foreach $g (@difffiles)
    {
      $dirs = dirname($g);
      $filename = basename($g);
       #print "$dirs\n";
      foreach $j (@array)
      {
         if( "$j" =~ /\Q$dirs/)
         {print "Sensitive path files changed under path $j and file name is  $filename\n";$count2=1;}
      }
   }
     return $count2;

}