你的问题的前提有一个错误,因为这一行:
$monitored_paths = {'svn/test-repo' => '/src/cpp', '/src/test', '/src/test2'}
相当于以下任何一个:
$monitored_paths = {'svn/test-repo' => '/src/cpp', '/src/test' => '/src/test2'}
$monitored_paths = {'svn/test-repo', '/src/cpp', '/src/test', '/src/test2'}
你真正想要的是:
$monitored_paths = {'svn/test-repo' => ['/src/cpp', '/src/test', '/src/test2']}
其中 [] 表示数组引用。您可以像这样创建一个数组引用:
my $arrayref = [1, 2, 3]; # called an "anonymous array reference"
或像这样:
my @array = (1, 2, 3);
my $arrayref = \@array;
你想要这样的东西:
$monitored_paths = { '/svn/test-repo' => 'http://....list.txt' }
foreach my $key (keys %$monitored_paths) {
next if ref $monitored_paths{$key} eq 'ARRAY'; # skip if done already
my @paths = get_paths_from_url($key);
$monitored_paths->{$key} = \@paths; # replace URL with arrayref of paths
}
用你的 URL 获取和解析函数替换 get_paths_from_url (使用 LWP 或其他什么......因为这不是你问题的一部分,我假设你已经知道如何做到这一点)。如果您编写函数 get_paths_from_url 以首先返回数组引用而不是数组,则可以保存一个步骤并$monitored_paths->{$key} = get_paths_from_url($key)
改为编写。