Многопоточность + ссылка на хеш-массив

  • Автор темы noize
  • Дата начала
N

noize

#1
Здравствуйте. С перлом знаком чуть менее полугода, поэтому не все подводные камни ещё изучил.
Имеется скрипт такого вида:
Код:
#!/usr/bin/perl -w 
use strict;
use threads;

my @threads;
my %hash1 = ( "1" => "a",
"2" => "b");
my %hash2 = ( "3" => "c",
"4" => "d");
foreach my $i (\%hash1, \%hash2) {
push @threads, threads->create(\&test,"$i");
}
foreach my $thread (@threads) {
$thread->join();
}

sub test {
my $arg = shift;
print "$arg\n";
print keys (%$arg), "\n";
}
Данный скрипт загоняет ссылки на 2 хеш-массива в параллельную обработку и передаёт их субпрограмме test. Так вот, при исполнении этого скрипта я получаю
Код:
HASH(0x81982b8)
Thread 1 terminated abnormally: Can't use string ("HASH(0x81982b8)") as a HASH ref while "strict refs" in use at test13.pl line 20.
HASH(0x8198368)
Thread 2 terminated abnormally: Can't use string ("HASH(0x8198368)") as a HASH ref while "strict refs" in use at test13.pl line 20.
т.е. разыменовывания не происходит. Если я делаю без многопоточности, т.е. просто передаю в test ссылку на хеш-массив, то всё нормально работает. Подскажите, как решить данную проблему, заранее благодарен.