Perl线程与数组的哈希值

| 我正在尝试与threads :: shared模块共享数组的哈希,如下所示。
use warnings;
use strict;
use threads;
use threads::shared;

my @allThreads;
share (my %array);

foreach (\'alpha\', \'beta\', \'gamma\')
{
    $name = $_;
    push @allThreads, threads->new(\\&doWork, $name);
}

foreach my $thread (@allThreads){ $thread->join; } # Wait for all threads to join.

sub doWork
{
    $tempName = shift;
    my @results = `/bin/ls /home/*`;
    doMoreWork($tempName, @results);
}

sub doMoreWork
{
    my $myName = shift;
    my @tempResults = @_;
    foreach (0 .. $#tempResults)
    {
        if($tempResults[$_] =~ /(\\w+)/)
        {
            my $x = $1;
            $array{$x} = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
        }
    }
}

foreach (keys %array)
{
    print \"$array{$_}->[3]\\n\";
}
我收到以下错误: 在myCode.pl上使用\“ strict refs \”时,不能使用字符串(\“ 11 \”)作为ARRAY引用。 我需要按数组元素对数组的共享哈希进行排序。 任何帮助,将不胜感激。     
已邀请:
        您的
doWork
函数正在标量上下文中评估
@temp
。因此它实际上是在做
$array{$tempName} = 11
。 您也可以省略
temp
变量,因为
[ ... ]
已经创建了数组引用。
sub doWork
{
    $tempName = shift;
    $array{$tempName} = [1 .. 11];
}
[编辑] 此版本的doMoreWork至少运行:
sub doMoreWork
{
    my $myName = shift;
    my @tempResults = @_;
    if(/(\\w+)/)
    {
        my $x = $1;
        share (my @temp);
        @temp = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
        $array{$x} = \\@temp;
    }
}
...但没有做任何有用的事情,因为
/(\\w+)/
与任何有意义的内容都不匹配。我不能告诉你你想在这里做什么...     
        您可以随时尝试使用我在此处找到的简化项目https://github.com/PabloK/ThreadedArray 它旨在简化数组中一组元素的工作。     

要回复问题请先登录注册