我试图从输出中减去一个数组。 我在目录中有一些文件集,我需要从脚本本身的数组中提到的目录列表中查找目录中存在的所有文件。但我没有得到输出。
这是我的剧本。
#!/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
请帮忙或建议。 提前谢谢。
答案 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);