如何检查文件是否在目录中

时间:2014-01-27 16:59:09

标签: perl file foreach directory exists

我有一个文本文件,其中包含单个助记符(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) 

这也不起作用..

请帮忙!

1 个答案:

答案 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;
}