0

假设我有 5 个文件:tmp1.txt, tmp2.txt, tmp3.txt, temp1.txt, temp2.txt.

现在有什么方法可以打开多个文件并使用通配符读取它们。

例子,

  1. 如果我写"t*.txt",则应该读取每个文件中的数据。
  2. 如果我写"tm*.txt",那么应该只读取 3 个文件中的数据。
4

2 回答 2

0

您可以使用glob来查找文件列表,并通过将列表分配给 来依次阅读它们@ARGV,这模拟了它们在命令行上传递的效果。

our @ARGV = glob '/path/to/tm*.txt';

while (<ARGV>) {
  print;
}
于 2013-06-26T11:06:25.907 回答
0

是的,您可以使用glob,假设这些文件存在于本地目录中,并且该目录中没有其他具有相似名称的文件。

print "Read which files? ";
chomp(my $glob = <STDIN>);
my @files_to_read = glob $glob;

当然,您可以通过过滤它们来确保没有其他文件

my %valid = map { $_ => 1 } qw(tmp1 tmp2 tmp3 temp1 temp2);
@files = grep $valid{$_}, glob $glob;

第一条语句创建一个哈希,其中有效的文件名键具有真值,另一条语句对 glob 列表的元素运行此检查。

于 2013-06-26T10:51:10.750 回答