我正在打开一个与LWP
的链接,并且在回复中还有其他链接我想要打开,以便//DoSomething
在每个链接上,其中有我刚刚打开的链接,我想这有点令人困惑,这里是我正在使用的代码:
my $request = GET $topic;
my $response = $ua->request($request);
usleep(52000);
my $tree = HTML::TreeBuilder->new();
$tree->parse($response->decoded_content);
my $link_1 = $tree->look_down('id' => 'link_1')->look_down('_tag' => 'a')->attr('href');
my $link_2 = $tree->look_down('id' => 'link_2')->look_down('_tag' => 'a')->attr('href');
my $link_3 = $tree->look_down('id' => 'link_3')->look_down('_tag' => 'a')->attr('href');
//then i insert them in an array
push @links, $link_1;
push @links, $link_2;
push @links, $link_3;
现在让我们说$link_2
和$topic
是相同的
foreach my $link (@links)
{
if($link ne $topic)
{
$request = GET $link;
$response = $ua->request($request);
usleep(52000);
$tree = HTML::TreeBuilder->new();
$tree->parse($response->decoded_content);
}
$json = $tree->look_down('id' => 'json_text')->attr('_content')->[0];
}
我现在想要的是不打开链接两次,因为perl没有按照推送顺序循环遍历数组,因为我在开始时尝试push @links, topic;
然后确保{{ 1}}在每个@links
之前没有$topic
之类的链接,但它不起作用,换句话说,我想跳过两次打开链接或以正确的推送顺序打印。
提前致谢
答案 0 :(得分:2)
我用于此类问题的一个技巧是使用哈希而不是数组。当您需要元素的顺序列表时,数组是一个很好的元素,而当您需要索引的UN排序列表时,散列是一个很好的元素。所以,对于你的问题,我会使用这样的解决方案:
my %links
# then i insert them in a hash
$links{$link_1} = 1;
$links{$link_2} = 1;
$links{$link_3} = 1;
然后,检查是否存在链接:
foreach my $link (keys(%links))
{
if($link ne $topic)
{
# and so on and so forth
我相信这可以回答你的问题。如果我不理解你的问题并引导你走错路,请告诉我。
从评论中更新:
如果您不想浏览所有存储的链接,只需检查哈希以查看它是否包含主题。如果没有,那么您可以进行下载:
if (!defined($links{$topic})) {
# and so on and so forth