【发布时间】:2013-12-05 17:35:06
【问题描述】:
在下面的代码(较大脚本的一部分)中,每次 $ref_h_report 的 2 次打印都会收到不同的结果,尽管脚本“有效”,即在两个子程序中都引用了相同的哈希。为什么打印会给出不同的结果?这会导致任何问题吗?
use threads;
use threads::shared;
my %h_report;
my $ref_h_report = share(%h_report);
$thr=threads->create(\&run_test)
$thr->join();
&merge_report;
sub run_test {
.....
$ref_h_report{'test'} = 'PASSED';
print "reference=%0d\n", $ref_h_report;
.....
}
sub merge {
if($ref_h_report{'test'} eq 'PASSED')
print "reference=%0d\n", $ref_h_report;
}
}
【问题讨论】:
-
总是
use strict; use warnings;$ref_h_report是字符串还是对哈希的引用? -
@M42 $ref_h_report 是对从 share(%h_report) 返回的哈希的引用(参见上面的代码 sn-p)
-
所以你必须使用:
$ref_h_report->{'test'} = 'PASSED';。而且,要打印什么。您的脚本使用use strict; use warnings;引发错误 -
share后面没有%... -
请显示您的实际代码,复制并粘贴。这有几个错误。
标签: multithreading perl hash share