我正在尝试创建并稍后在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) });
}
在主要内容我想像这样调用sub:
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.
我通过参考传递并返回,但不确定最好的方式。请帮忙。
答案 0 :(得分:3)
我认为你的意思是
sub run_thread {
my (undef, $cmd) = @_;
$_[0] = threads->create(...);
}
run_thread(my $thread, ...);
$thread->join();
(分配给参数而不是复制参数(undef)的变量($thr
)。)
但是为什么要通过参数返回值?返回它会更有意义。
sub run_thread {
my ($cmd) = @_;
return threads->create(...);
}
my $thread = run_thread(...);
$thread->join();