Perl не может войти в цикл for с URI::QueryParam

У меня есть следующий фрагмент кода:

use strict;
use warnings;
use URI;
use URI::QueryParam;

open (URLS, "<urls.txt");
open (EXTRAPARAMS, "<extraparams.txt");

my @words = (<EXTRAPARAMS>);  

while ( my $URL = <URLS>) {
        my $uri = URI->new($URL);
        print "GETS THIS FAR\n";
        print "$uri\n";

    for my $key ($uri->query_param) {
         print "CANT GET HERE\n";                        #why does it not get here?
         my $org = $uri->query_param($key);
         for my $word (@words) {
             for ("$org$word", $word, "$word$org") {
                 $uri->query_param($key, $_);
                 print $uri->as_string, $/;
             }
         }
         $uri->query_param($key, $org);
    }
}

Проблема, с которой я столкнулся

Я могу прочитать каждый из URL-адресов из текстового файла URLS и распечатать их, но по какой-то причине я не могу войти в цикл for.

Есть ли что-то очевидное, что я упускаю из виду или не делаю, потому что не могу понять, почему этого не происходит?

Это может быть не связано с материалом URI::QueryParam, а просто ошибкой, которую я сделал, но я не могу ее найти.

Я просмотрел документы для URI::QueryParam, и все, кажется, написано/отформатировано так, как должно быть, насколько я понимаю, части $key и query_param, поэтому я не знаю, что не так?

Ваша помощь очень ценится, большое спасибо


person yonetpkbji    schedule 13.03.2013    source источник
comment
Можете ли вы показать пример URL, для которого он не работает? Если он не входит в цикл for, это говорит о том, что параметров нет.   -  person    schedule 13.03.2013
comment
@ dan1111 - Да, я думаю, вы только что ответили на мой вопрос.   -  person yonetpkbji    schedule 13.03.2013
comment
Помимо отображения ввода, вы также должны проверить возвращаемое значение ваших операторов open, чтобы убедиться, что они выполнены успешно.   -  person TLP    schedule 13.03.2013
comment
Это определенно не будет ошибкой, если я совершу дважды, и да, я бы сделал это, используя or die и так далее, спасибо.   -  person yonetpkbji    schedule 13.03.2013


Ответы (1)


Это упрощение вашего кода отлично работает:

use strict;
use warnings;
use URI;
use URI::QueryParam;

my $uri = URI->new("http://www.foo.com?bar=baz&sproing=blargh");

for my $key ($uri->query_param) {
     print "$key\n";
}

Выход:

bar
sproing

Проблема почти наверняка связана с вашими данными: ваш URL-адрес имеет неправильный формат или не имеет никаких параметров.

person Community    schedule 13.03.2013
comment
Да, были правы, причина в том, что URL-адрес не содержал никаких параметров, спасибо за вашу помощь. - person yonetpkbji; 13.03.2013
comment
@perl-user, рад помочь. Мы все делали такие ошибки! - person ; 13.03.2013