假设我有 5 个文件:tmp1.txt
, tmp2.txt
, tmp3.txt
, temp1.txt
, temp2.txt
.
现在有什么方法可以打开多个文件并使用通配符读取它们。
例子,
- 如果我写
"t*.txt"
,则应该读取每个文件中的数据。 - 如果我写
"tm*.txt"
,那么应该只读取 3 个文件中的数据。
假设我有 5 个文件:tmp1.txt
, tmp2.txt
, tmp3.txt
, temp1.txt
, temp2.txt
.
现在有什么方法可以打开多个文件并使用通配符读取它们。
例子,
"t*.txt"
,则应该读取每个文件中的数据。"tm*.txt"
,那么应该只读取 3 个文件中的数据。您可以使用glob
来查找文件列表,并通过将列表分配给 来依次阅读它们@ARGV
,这模拟了它们在命令行上传递的效果。
our @ARGV = glob '/path/to/tm*.txt';
while (<ARGV>) {
print;
}
是的,您可以使用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 列表的元素运行此检查。