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".
In reply to Re: Re: $threads->join() only returns one argument??? BUG?
by djantzen
in thread $threads->join() only returns one argument??? BUG?
by rr
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |