これを理解するのに約6時間を費やしました。私はPerlの達人が助けてくれることを願っています。ハッシュの更新はHTTP :: Server :: Simple :: CGIの呼び出しに反映されません
私は、ポーリングしているサーバーに関する情報でハッシュを更新するプログラムを持っています。私はHTTP :: Server :: Simple :: CGIを使ってこの情報をユーザーに報告します。私は、HTTP :: Server :: Simple :: CGIモジュールがハッシュへの更新を見ず、ハッシュが初期化されたデータだけを報告するという問題にぶつかっています。
{
package LabBrowser;
use warnings;
use strict;
use Thread::Queue;
use LWP::Simple;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
my %problem_data_structure;
sub server_loop {
while(1) {
for my $server (@server_list) {
fetch_server_info(@$server);
}
}
}
sub fetch_server_info {
my ($hostname, $port) = @_;
my $content = fetch_webpage_content("http://" . $hostname . ":" . $port);
my @data = parse_data(content);
$problem_data_structure{$hostname} = [@data];
}
##THIS SUB
sub handle_request {
my ($self, $cgi) = @_;
my $path = $cgi->path_info();
##THIS LINE
print Data::Dumper->Dump([\%problem_data_structure],['handle']);
}
}
my $pid = LabBrowser->new(8080)->background();
my $labBrowser = LabBrowser->init();
$labBrowser->server_loop();
print "$pid !!!\n";
は私がでhandle_requestを除いて、どこかのプログラムで%problem_data_structure内のデータを取得することができます:
は、私は、次のコード、要約されています。そこでは、変数がどのように初期化されたかだけを知っているかのように見えます。最初にキーと値のペアを追加すると、それが報告されます。ただし、初期化以降、データ構造に追加されたものは報告されません。
何が起こっているのか知っていますか?
あなたは 'handle_request'をどのように呼び出しているかを示すコードを表示できますか? – keety