1 package Object::Remote::Role::Connector::PerlInterpreter;
4 use Object::Remote::ModuleSender;
5 use Object::Remote::Handle;
6 use Scalar::Util qw(blessed);
9 with 'Object::Remote::Role::Connector';
11 has module_sender => (is => 'lazy');
13 sub _build_module_sender {
15 grep {blessed($_) && $_->isa('Object::Remote::ModuleLoader::Hook') }
17 return $hook ? $hook->sender : Object::Remote::ModuleSender->new;
20 around connect => sub {
21 my ($orig, $self) = (shift, shift);
22 my $conn = $self->$orig(@_);
23 Object::Remote::Handle->new(
25 class => 'Object::Remote::ModuleLoader',
26 args => { module_sender => $self->module_sender }
31 sub _perl_command { 'perl', '-' }
38 $self->_perl_command(@_),
39 ) or die "Failed to run perl at '$_[0]': $!";
40 return ($foreign_stdin, $foreign_stdout, $pid);
45 my ($foreign_stdin, $foreign_stdout, $pid) = $self->_start_perl(@_);
46 require Object::Remote::FatNode;
47 print $foreign_stdin $Object::Remote::FatNode::DATA, "__END__\n"
48 or die "Failed to send fatpacked data to new node on '$_[0]': $!";
49 return ($foreign_stdin, $foreign_stdout, $pid);