1 package Object::Remote::Role::Connector::PerlInterpreter;
5 use Object::Remote::ModuleSender;
6 use Object::Remote::Handle;
7 use Scalar::Util qw(blessed);
10 with 'Object::Remote::Role::Connector';
12 has module_sender => (is => 'lazy');
14 sub _build_module_sender {
16 grep {blessed($_) && $_->isa('Object::Remote::ModuleLoader::Hook') }
18 return $hook ? $hook->sender : Object::Remote::ModuleSender->new;
21 around connect => sub {
22 my ($orig, $self) = (shift, shift);
23 my $conn = $self->$orig(@_);
24 Object::Remote::Handle->new(
26 class => 'Object::Remote::ModuleLoader',
27 args => { module_sender => $self->module_sender }
32 sub _perl_command { 'perl', '-' }
39 $self->_perl_command(@_),
40 ) or die "Failed to run perl at '$_[0]': $!";
41 return ($foreign_stdin, $foreign_stdout, $pid);
46 my ($foreign_stdin, $foreign_stdout, $pid) = $self->_start_perl(@_);
47 $foreign_stdin->autoflush(1);
48 print $foreign_stdin 'BEGIN { $ENV{OBJECT_REMOTE_DEBUG} = 1 }'."\n"
49 if $ENV{OBJECT_REMOTE_DEBUG};
50 print $foreign_stdin $self->fatnode_text
51 or die "Failed to send fatpacked data to new node on '$_[0]': $!";
52 return ($foreign_stdin, $foreign_stdout, $pid);
57 require Object::Remote::FatNode;
59 $text .= 'BEGIN { $ENV{OBJECT_REMOTE_DEBUG} = 1 }'."\n"
60 if $ENV{OBJECT_REMOTE_DEBUG};
62 $INC{'Object/Remote/FatNode.pm'} = __FILE__;
63 $Object::Remote::FatNode::DATA = <<'ENDFAT';
65 $text .= $Object::Remote::FatNode::DATA;
68 eval $Object::Remote::FatNode::DATA;