【发布时间】:2011-12-28 15:57:09
【问题描述】:
我正在从事一个项目,该项目有一次从 ftp 服务器获取文件列表。此时,它要么返回一个文件数组引用,要么如果传递了一个可选的正则表达式引用(即qr),它会使用 grep 过滤列表。此外,如果 qr 有一个捕获组,它将捕获的部分视为版本号并返回一个 hashref,其中键是版本,值是文件名(如果没有捕获,它将作为数组返回组)。代码看起来像(稍微简化)
sub filter_files {
my ($files, $pattern) = @_;
my @files = @$files;
unless ($pattern) {
return \@files;
}
@files = grep { $_ =~ $pattern } @files;
carp "Could not find any matching files" unless @files;
my %versions =
map {
if ($_ =~ $pattern and defined $1) {
( $1 => $_ )
} else {
()
}
}
@files;
if (scalar keys %versions) {
return \%versions;
} else {
return \@files;
}
}
此实现尝试创建哈希并在成功时返回它。我的问题是,我是否可以检测到 qr 有一个捕获组,并且只有在有的情况下才尝试创建哈希?
【问题讨论】: