强制循环以特定元素开始?(Perl)

强制循环以特定元素开始?(Perl),perl,Perl,我正在打开一个与LWP的链接,在响应中,我还想打开其他链接,以便在每个链接上//DoSomething,其中有一个链接是我刚刚打开的,我想这有点混乱,下面是我使用的代码: my $request = GET $topic; my $response = $ua->request($request); usleep(52000); my $tree = HTML::TreeBuilder->new(); $tree->parse($response->decoded_co

我正在打开一个与
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在开头正确,然后确保
@links
在每次
推送@links之前没有像
$topic
这样的链接,$link?
但它不起作用,换句话说,我想跳过打开链接两次或按正确的推送顺序打印


提前感谢

我解决这类问题的一个技巧是使用散列而不是数组。当需要元素的有序列表时,数组是一个很好的元素,而当需要索引的非有序列表时,哈希是一个很好的元素。所以,对于您的问题,我将使用这样的解决方案:

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

谢谢:D,我正在考虑使用散列来代替,但是我想强制我的循环首先从
$topic
开始,然后继续剩下的,我不知道是否是possible@Mugiwara看看更新后的答案,它显示了如何只下载不存在的主题。非常感谢@Joel:D