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

Multithreading Perl线程间共享变量编译错误,multithreading,perl,shared-memory,Multithreading,Perl,Shared Memory,我想我不应该犯这个错误,但既然我已经犯了,我显然错了。 情况非常简单:在N个线程之间共享一个变量,并让它们将其递增一 代码非常简短和直接: use threads; use threads::shared; use strict; sub Handler() { my $shared_var : shared = 1000; my @threads; push @threads, thread->new(\&PrintGreeting); $_-

我想我不应该犯这个错误,但既然我已经犯了,我显然错了。 情况非常简单:在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行是我增加变量的那一行


我搜索了,但找不到有相同错误的人。

仅仅因为您正在使用线程并不意味着其他Perl规则被抛出窗口

您可以在
Handler
中定义
my$shared\u var
,但尝试在
PrintGreeting
中使用它。这对于普通变量不起作用,对于线程之间共享的变量也不起作用。基本变量范围


也许您的意思是将其转换为包级别(全局)变量?

我明白了。那么我会把它们转移到全球范围。