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 に答える