in reply to Re: $threads->join() only returns one argument??? BUG?
in thread $threads->join() only returns one argument??? BUG?
perlthrtut explicitly says that you can return a list, but the example code doesn't work as advertised:
use threads; $thr = threads->new(\&sub1); @ReturnData = $thr->join; print "Thread returned @ReturnData"; sub sub1 { return "Fifty-six", "foo", 2; }
prints "Thread returned 2". It looks like if the return statement returns a list you'll get the last element, and if you wrap it up inside an array (e.g., return @array = ("Fifty-six", "foo", 2)) it'll put it in scalar context no matter what the lvalue of the join(). Weird.
Another option is to return an array reference and assign it to a scalar left of the join, or to pass a reference to a shared array into the threaded sub and have it populated.
use threads; use threads::shared; share(@array); $thr = threads->new("sub1"); @ReturnData = $thr->join; print "Thread returned @ReturnData\n"; print "Thread populated @array\n"; sub sub1 { @array = ("Fifty-six", "foo", 2) }
prints "Thread returned 3" and "Thread populated Fifty-six foo 2".
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Re: $threads->join() only returns one argument??? BUG?
by BrowserUk (Patriarch) on Jun 11, 2003 at 23:41 UTC | |
by JamesNC (Chaplain) on Jun 12, 2003 at 03:00 UTC |