perl 要修改传入参数,就像c一样,要传入引用
#!/usr/bin/perl -w
my $var = 1212;
sub test
{
my ($ref) = @_;
$$ref = 12;
}
test(\$var);
print($var);
— OUTPUT ———
12
但是在thread里面,如果直接传入引用,则无效
#!/usr/bin/perl -w
use Thread;
my $var = 1212;
sub test
{
my ($ref) = @_;
$$ref = 12;
}
$id = Thread->new(\&test, \$var);
sleep(1);
print($var);
$id->join();
— OUTPUT ———
1212
需要引入多线程变量共享,将var设置成全局的,这样就可以,当然多个线程就需要考虑竞争神马的,可以继续参考lock之类的文章
#!/usr/bin/perl -w
use Thread;
use threads::shared;
my $var : shared = 1212;
sub test
{
$var = 12;
}
$id = Thread->new(\&test);
sleep(1);
print($var);
$id->join();
— OUTPUT ———
12