Perl线程间共享变量编译错误



我想我不应该得到这个错误,但既然我得到它,我显然是错的。这种情况非常简单:在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中使用它。这对普通变量不起作用,对线程之间共享的变量也不起作用。基本变量作用域。

也许你想声明一个包级(全局)变量代替?

最新更新