Я работаю над проектом, который в какой-то момент получает список файлов с FTP-сервера.В этот момент он либо возвращает массив ссылок на файлы ИЛИ, если передается необязательная ссылка на регулярное выражение (т. Е. qr
), он фильтрует список, используя grep.Кроме того, если qr
имеет группу захвата, он обрабатывает захваченный раздел как номер версии и возвращает вместо него хэш-ссылку, где ключи - это версии, а значения - имена файлов (которые были бы возвращены в виде массива, если бы захватгруппы).Код выглядит (слегка упрощенно)
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
имеет группу захвата, и пытаться создать хеш, только если это так?