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

Тема в разделе "Perl программирование", создана пользователем noize, 27 мар 2010.

  1. noize

    noize Гость

    Здравствуйте. С перлом знаком чуть менее полугода, поэтому не все подводные камни ещё изучил.
    Имеется скрипт такого вида:
    Код (Text):
    #!/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. Так вот, при исполнении этого скрипта я получаю
    Код (Text):
    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 ссылку на хеш-массив, то всё нормально работает. Подскажите, как решить данную проблему, заранее благодарен.
     
Загрузка...

Поделиться этой страницей