スレッドを使用してスクリプトを作成しているため、スレッドをサポートする perl (perl5.20) を再構築する必要がありました。perl を再構築したため、エラーが発生しました。
Can't locate object method "query_form" via package "LWP::UserAgent"
LWP::UserAgent、LWP::Simple、URI を再インストールしようとしましたが、(cpan によると) 最新です。
欠陥のあるコード:
#!/usr/bin/env perl
package get_xml;
use strict;
use warnings;
use Curses;
use LWP::Simple;
use LWP::UserAgent;
use MIME::Base64;
use URI;
use URI::http;
use HTTP::Request::Common;
use parse_xml;
# ...
sub write_conv_thread{
my ($window, $rows, $username, $url, $ua) = @_;
while(1){
$$url->query_form( # line 43
"heartbeat" => '0',
"conv" => 0,
"username" => "$username",
"active" => 0
);
my $xml = $$ua->get($url);
my @conv = get_conv($xml);
print_all_lines($window, $rows, @conv);
$$window->refresh();
sleep(5);
}
}
1;
そして正確なエラーメッセージ:Thread 1 terminated abnormally: Can't locate object method "query_form" via package "LWP::UserAgent" at get_xml.pm line 43.
関数を呼び出すコード:
#!/usr/bin/env perl
use strict;
use warnings;
use Curses;
use LWP::Simple;
use LWP::UserAgent;
use MIME::Base64;
use URI;
use threads;
use get_xml;
use post_xml;
# ... initialization of Curses windows ...
# $chat_win is a curse, $row is a number
my $server_endpoint = "...";
my $ua = LWP::UserAgent->new;
my $url = URI->new( "$server_endpoint/index.php" );
my $thread = threads->new(\&get_xml::write_conv_thread, \$chat_win, $row-4,"...", \$url, \$ua);
$thread->detach();
perl にオブジェクト メソッドを見つけさせるにはどうすればよいですか?
ご回答ありがとうございます。