1

我的伪代码如下所示:

#!/usr/local/bin/perl5.8.8
use warnings;
use strict;

use threads;
use threads::shared;

sub tasker;

my @allThreads = ();
my @array = ('alpha','beta','gamma');
push @allThreads, threads->new(\&tasker, @array);
$_->join foreach @allThreads;

sub tasker{
    my @localArray = @_;

    ...call some other modules/functions...

}

当线程运行时,几秒钟后我在我的 STDOUT 上收到这些消息:

Still here!
Still here!
Still here!

之后线程成功加入(完成)。我不确定这些来自哪里以及为什么它们只出现在某些@array 中。值得一提的是,这些消息的数量等于@array 中的元素。

将感谢专家的任何帮助。

4

1 回答 1

1

您的代码(或您正在使用的模块之一)似乎有一些剩余的调试代码。要找到它,请添加

INIT { print "$0\n"; print "$_\n" for values %INC; exit }

到你的脚本。管道输出到

xargs grep 'Still here!'

然后删除调试代码。

PS - 如果您使用warn没有尾随换行符,您的调试消息将附加文件名和行号。这可能很有用:)

于 2012-06-19T14:09:54.810 回答