in reply to How do I used a threaded subroutine inside a perl object

adamcpfeiffer:

In a situation like this, I'd suggest using a closure that holds your object reference.

my $thing = new thing(); my $closure = sub { $thing->stuff_to_do(); }; my $thread = threads->create($closure);

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Replies are listed 'Best First'.
Re^2: How do I used a threaded subroutine inside a perl object
by Anonymous Monk on Jul 03, 2013 at 01:55 UTC
    Why?  threads->create( $thing->can('stuff_to_do'), $thing );
Re^2: How do I used a threaded subroutine inside a perl object
by adamcpfeiffer (Novice) on Jul 03, 2013 at 12:34 UTC
    I tried to use a code reference, but that failed as well. One difference I had to use is that I can't call object->new() outside of the closure as the new calls _init which is what I need to have run in a thread. I can change the object so new just creates a new object and then call _init in the closure if that would help.
    sub getFDCObjects { my $self = shift; my %fdcObjectHash; my @threadQueue; my %switches = $self->getSwitches(); for my $switch (keys %switches) { #my $fdcObject = $self->_openFDCObject($switches{$switch}, $sw +itch); my $swObject = $switches{$switch}; my $threaddo = sub { my $self = shift; my $swObject = shift; my $switch = shift; my $fdcObject = FosDataCapture->new($log, $swObject); return ($fdcObject, $switch); }; my $thread = threads->create($threaddo,$swObject, $switch);