in reply to $threads->join() only returns one argument??? BUG?
This is pretty obviously a bug. The context that is applied to the $thr->join call is the context that the threads->new call was in. That is:
my $thr = threads->new( sub { return (1,2,3) }); my @a = $thr->join(); print "return is @a\n";
..fails, while..
my ($thr) = threads->new( sub { return (1,2,3) }); my @a = $thr->join(); print "return is @a\n";
..works fine. Note the difference in parens on the my $thr line. I'm going to poke at the threads code on this one.
Update: Upon reflection and looking at the code, it makes sense in a perverse way. Because the subroutine/thread starts execution upon creation, someone could call wantarray from it off the top. If the context was determined at join time, there would be no way to determine the proper wantarray value. In fact, this behavior is documented in bleedperl's threads.pm (search for "context").
perl -pe '"I lo*`+$^X$\"$]!$/"=~m%(.*)%s;$_=$1;y^`+*^e v^#$&V"+@( NO CARRIER'
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: $threads->join() only returns one argument??? BUG?
by Anonymous Monk on Feb 25, 2010 at 19:29 UTC | |
by Anonymous Monk on Feb 17, 2012 at 16:49 UTC | |
Re^2: $threads->join() only returns one argument??? BUG?
by Anonymous Monk on Feb 12, 2015 at 20:35 UTC |