我想我不应该得到这个错误,但既然我得到它,我显然是错的。这种情况非常简单:在N个线程之间共享一个变量,并让它们将其增加1。
代码非常简短和直接:
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行是我增加变量的行。
我搜索了,但是没有找到同样错误的人
仅仅因为您使用线程并不意味着Perl的其他规则被抛到窗外。
您在Handler
中定义了my $shared_var
,但尝试在PrintGreeting
中使用它。这对普通变量不起作用,对线程之间共享的变量也不起作用。基本变量作用域。
也许你想声明一个包级(全局)变量代替?