从输出数组中减去一个数组

时间:2015-03-05 07:27:24

标签: perl

我试图从输出中减去一个数组。 我在目录中有一些文件集,我需要从脚本本身的数组中提到的目录列表中查找目录中存在的所有文件。但我没有得到输出。

这是我的剧本。

#!/usr/bin/perl

use strict;
use warnings;

my $dir = shift || "DIR";
my $pattern = shift || "MY_FILE";
my @files = qw(MY_FILE_JAN_.xls MY_FILE_FEB_.xls MY_FILE_MAR_.xls MY_FILE_APR_.xls MY_FILE_MAY_.xls MY_FILE_JUN_.xls MY_FILE_JUL_.xls);

opendir (DIR, $dir) or die "Failed to open directory\n";
my @files_found  = grep{/^${pattern}_[a-zA-Z]/} readdir(DIR);
for(@files_found){s/[0-9]//g}

my %hash=map{$_ =>1} @files;
my @diff=grep(!defined $hash{$_}, @files_found);

print "$_\n" foreach (@diff);

closedir(DIR);

目录中的文件列表是:

MY_FILE_JAN_201502.xls
MY_FILE_FEB_201502.xls
MY_FILE_MAR_201502.xls
MY_FILE_APR_201502.xls
MY_FILE_JUN_201502.xls
MY_FILE_MAY_201502.xls

请帮忙或建议。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

这是因为在

my @diff=grep(!defined $hash{$_}, @files_found);

您正在查看找到的文件列表,因为您的所有文件都位于@files(同时%hash),@diff将是空的。

您需要的是根据@files

进行差异
my %hash=map{$_ =>1} @files_found;
my @diff=grep(!defined $hash{$_}, @files);