0

我正在尝试在 perl 脚本的主要部分创建并稍后加入一个线程,但在一个子例程中创建该线程,该子例程接受参数并xterm在传入的命令中添加一些额外的参数。最好返回线程名称(ID?)?

这是子程序

sub run_thread{
  my $thread_name = $_[0];
  my $cmd = $_[1];
  $thread_name = threads->create({'void' => 1},
    sub { print("\n$cmd\n"); system($xterm . '-T "' . $cmd . '" -e ' . $cmd) });
}

主要我想这样称呼子:

my $thr1;    
run_thread($thr1, "pwd");
...
$thr1->join();

这是行不通的,并且在很多层面上可能在某种程度上是错误的。错误是:

Use of uninitialized value $_[0] in concatenation (.) or string at line 37.
Can't call method "join" on an undefined value at line 21.

我搞砸了通过引用传递和返回,但不确定最好的方式。请帮忙。

4

1 回答 1

3

我想你的意思是

sub run_thread {
   my (undef, $cmd) = @_;
   $_[0] = threads->create(...);
}

run_thread(my $thread, ...);
$thread->join();

(分配给参数,而不是$thr参数 (undef) 复制到的变量 ( )。)

但是为什么要通过参数返回一个值呢?退货更有意义。

sub run_thread {
   my ($cmd) = @_;
   return threads->create(...);
}

my $thread = run_thread(...);
$thread->join();
于 2013-10-04T02:15:55.570 回答