Perl 更新散列文件';t反映在对HTTP::Server::Simple::CGI的调用中

Perl 更新散列文件';t反映在对HTTP::Server::Simple::CGI的调用中,perl,cgi,Perl,Cgi,我花了约6个小时试图弄明白这一点。我希望perl大师会有所帮助 我有一个循环的程序,用我正在轮询的服务器的信息更新散列。我正在使用HTTP::Server::Simple::CGI向用户报告此信息。我遇到了一个问题,HTTP::Server::Simple::CGI模块不会看到哈希的更新,只会报告哈希初始化时使用的数据 我有以下代码摘要: { package LabBrowser; use warnings; use strict; use Thread::Queue; use LWP::Si

我花了约6个小时试图弄明白这一点。我希望perl大师会有所帮助

我有一个循环的程序,用我正在轮询的服务器的信息更新散列。我正在使用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";
我可以在程序中的任何位置获取%problem\u data\u结构中的数据,除了handle\u请求。在这里,它似乎只知道变量初始化为什么。如果我在开头添加一些键、值对,它会报告。但是,它不会报告自初始化以来添加到数据结构的任何内容


有人知道发生了什么吗?

后台()是在后台处理请求的线索。Perl中的进程不共享内存,因此当在
handle\u request
中修改
%problem\u data\u structure
时,父进程中
%problem\u data\u structure
的(原始)副本不受影响。

background()
是在后台进程中处理请求的线索。Perl中的进程不共享内存,因此当在
handle\u request
中修改
%problem\u data\u结构时(原始)父进程中的
%problem\u data\u structure
的副本不受影响。

您能告诉我们您如何调用
处理请求的代码吗
您能告诉我们您如何调用
处理请求的代码吗
太棒了!就这样!我爱你。我不认为会有另外一个过程,即使文档确实声明了。哎呀!我可以通过贝宝给你买杯啤酒吗?太好了,斯科特!就这样!我爱你。我不认为会有另外一个过程,即使文档确实声明了。哎呀!我可以通过贝宝给你买杯啤酒吗?