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 }
29 require Object::Remote::Prompt;
30 Object::Remote::Prompt::maybe_set_prompt_command_on($conn);
34 sub _perl_command { 'perl', '-' }
41 $self->_perl_command(@_),
42 ) or die "Failed to run perl at '$_[0]': $!";
43 return ($foreign_stdin, $foreign_stdout, $pid);
48 my ($foreign_stdin, $foreign_stdout, $pid) = $self->_start_perl(@_);
49 $foreign_stdin->autoflush(1);
50 print $foreign_stdin 'BEGIN { $ENV{OBJECT_REMOTE_DEBUG} = 1 }'."\n"
51 if $ENV{OBJECT_REMOTE_DEBUG};
52 print $foreign_stdin $self->fatnode_text
53 or die "Failed to send fatpacked data to new node on '$_[0]': $!";
54 return ($foreign_stdin, $foreign_stdout, $pid);
59 require Object::Remote::FatNode;
61 $text .= 'BEGIN { $ENV{OBJECT_REMOTE_DEBUG} = 1 }'."\n"
62 if $ENV{OBJECT_REMOTE_DEBUG};
64 $INC{'Object/Remote/FatNode.pm'} = __FILE__;
65 $Object::Remote::FatNode::DATA = <<'ENDFAT';
67 $text .= $Object::Remote::FatNode::DATA;
70 eval $Object::Remote::FatNode::DATA;