我想我不应该得到这个错误,但是因为我得到它,我显然是错的。 情况非常简单:在N个线程之间共享一个变量,并将它们递增一个。
代码非常简短直接:
use threads;
use threads::shared;
use strict;
sub Handler()
{
my $shared_var : shared = 1000;
my @threads;
push @threads, thread->new(\&PrintGreeting);
$_->join for @threads;
}
sub PrintGreeting()
{
$shared_var++;
print "hello, world $shared_var \n";
}
Handler();
我得到的错误是:
Global symbol "$shared_var" requires explicit package name at /home/path/tosource/program.pl line 15.
第15行是我增加变量的行。
我搜索过,但找不到有同样错误的人。
答案 0 :(得分:1)
仅仅因为你使用线程并不意味着Perl的其他规则被抛弃了。
您在my $shared_var
中定义Handler
,但尝试在PrintGreeting
中使用它。这不会对正常变量起作用,也不会在线程之间共享。基本变量范围。
也许您打算对包级(全局)变量进行十分转换?