Perl: Многопоточность + ссылка на хеш-массив (не работает (()

Модератор: Модераторы разделов

Аватара пользователя
noize
Сообщения: 164
ОС: Debian

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

Сообщение noize »

Здравствуйте. С перлом знаком чуть менее полугода, поэтому не все подводные камни ещё изучил.
Имеется скрипт такого вида:

Код: Выделить всё

#!/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 ссылку на хеш-массив, то всё нормально работает. Подскажите, как решить данную проблему, заранее благодарен.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

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

Сообщение pcodr »

Код: Выделить всё

push @threads, threads->create(\&test,"$i");


Вы превратили ссылку на хеш в строку, т.к. заключили переменную $i в кавычки. Уберите кавычки.
remote system type is unix
Спасибо сказали:
Аватара пользователя
noize
Сообщения: 164
ОС: Debian

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

Сообщение noize »

и то верно. Спасибо pcodr
Спасибо сказали: