【发布时间】:2011-03-16 15:57:20
【问题描述】:
我想知道是否有什么可以让我执行以下操作:
folder1 has files "readfile1" "f2" "fi5"
我唯一知道的是我需要读取以readfile 开头的文件,而我不知道字符串readfile 后面的名称中有什么。另外,我知道目录中没有其他文件以readfile开头。
如何使用open 命令打开此文件?
谢谢。
【问题讨论】:
标签: perl file file-handling
我想知道是否有什么可以让我执行以下操作:
folder1 has files "readfile1" "f2" "fi5"
我唯一知道的是我需要读取以readfile 开头的文件,而我不知道字符串readfile 后面的名称中有什么。另外,我知道目录中没有其他文件以readfile开头。
如何使用open 命令打开此文件?
谢谢。
【问题讨论】:
标签: perl file file-handling
glob可用于查找匹配某个字符串的文件:
my ($file) = glob 'readfile*';
open my $fh, '<', $file or die "can not open $file: $!";
【讨论】:
autodie更光荣。
my $file = ( glob 'readfile*' )[0]; 只是为了使从列表中的提取更加明确,这样一些白痴就不会出现并使我的列表分配成为标量分配并打破东西。
glob 'readfile* 可以返回空列表、多个文件或一个目录。所以,要完整,这些都需要检查,不是吗?同意autodie虽然...
您可以将glob 用于简单的情况,正如工具所建议的那样。
my ($file) = glob 'readfile*';
如果查找正确文件的标准更复杂,只需阅读整个目录并使用 Perl 的全部功能 将列表筛选为您需要的内容:
use strict;
use warnings;
use File::Slurp qw(read_dir);
my $dir = shift @ARGV;
my @files = read_dir($dir);
# Filter the list as needed.
@files = map { ... } @files;
【讨论】:
您不一定需要导入来读取目录的内容 - perl 有一些内置函数可以做到这一点:
opendir DIR, ".";
my ($file) = grep /readfile.*/, readdir(DIR);
open FILE, $file or die $!;
【讨论】: