Подскажите, почему в следуюшем примере $data{$i} не изменяется? А если поменять $thr{$i} = threads->new(\&sub1, $i); на $thr{$i} = threads->new(\&sub1($i));
то $data{$i} изменяется но perl начинает ругаться:
thread failed to start: Not a CODE reference at thr.pl line 15.
>> thr.pl
#!/usr/bin/perl -w
use strict; use threads;
sub sub1;
my %thr; my %data;
foreach my $i (0..1) { $data{$i} = ""; $thr{$i} = threads->new(\&sub1, $i); $thr{$i}->join; }
foreach my $i (0..1) { print "$data{$i}\n"; }
exit;
sub sub1 { my $a = $_[0]; $data{$a} = "a $a";
async{ $data{$a} = "a $a"; sleep 3-$a; }; return 0; }