我有一个文本文件,其中包含单个助记符(1000+)的列表,以及一个也包含页面文件的目录。我想看看给定助记符有多少页面。
下面是我的代码到目前为止..
use strict;
use warnings;
use File::Find ();
my $mnemonics = "path\\path\\mnemonics.txt";
my $pages = "path\\path\\pages\\";
open (INPUT_FILE, $names) or die "Cannot open file $mnemonics\n";
my @mnemonic_list = <INPUT_FILE>;
close (INPUT_FILE);
opendir (DH, $pages);
my @pages_dir = readdir DH;
foreach my $mnemonic (@mnemonic_list) {
foreach my $page (@pages_dir) {
if (-e $mnemonic) {
print "$mnemonic is in the following page: $page";
} else {
print "File does not exist \n";
}
}
}
基本上,我知道页面中存在名称,但它没有显示正确的输出。当我知道它时,我得到了很多“文件不存在”。
此外,我尝试使用:(/ e)而不是(-e)
if ($name =~ $page)
这也不起作用..
请帮忙!
答案 0 :(得分:1)
假设您要搜索一个充满文本文件的目录并打印包含mnemonics.txt中单词的文件的名称,请尝试以下操作:
use strict; use warnings;
my $mnemonics = "path/mnemonics.txt";
my $pages = "path/pages/";
open (INPUT_FILE, $mnemonics) or die "Cannot open file $mnemonics\n";
chomp(my @mnemonic_list = <INPUT_FILE>);
close (INPUT_FILE);
local($/, *FILE); # set "slurp" mode
for my $filename (<$pages*>) {
next if -d "$filename"; # ignore subdirectories
open FILE, "$filename";
binmode(FILE);
$filename =~ s/.+\///; # remove path from filename for output
my $contents = <FILE>; # "slurp" file contents
for my $mnemonic (@mnemonic_list) {
if ($contents =~ /$mnemonic/i) {
print "'$mnemonic' found in file $filename\n";
}
}
close FILE;
}