Commit | Line | Data |
a9fdb55e |
1 | package Object::Remote::Role::Connector::PerlInterpreter; |
2 | |
3 | use IPC::Open2; |
4 | use Object::Remote::ModuleSender; |
5 | use Object::Remote::Handle; |
6 | use Object::Remote::FatNode; |
7 | use Moo::Role; |
8 | |
9 | with 'Object::Remote::Role::Connector'; |
10 | |
11 | around connect => sub { |
12 | my ($orig, $self) = (shift, shift); |
13 | my $conn = $self->$orig(@_); |
14 | Object::Remote::Handle->new( |
15 | connection => $conn, |
16 | class => 'Object::Remote::ModuleLoader', |
17 | args => { module_sender => Object::Remote::ModuleSender->new } |
18 | )->disarm_free; |
19 | return $conn; |
20 | }; |
21 | |
22 | sub _perl_command { 'perl', '-' } |
23 | |
24 | sub _open2_for { |
25 | my $self = shift; |
26 | my $pid = open2( |
27 | my $foreign_stdout, |
28 | my $foreign_stdin, |
29 | $self->_perl_command(@_), |
30 | ) or die "Failed to run perl at '$_[0]': $!"; |
31 | print $foreign_stdin $Object::Remote::FatNode::DATA, "__END__\n"; |
32 | return ($foreign_stdin, $foreign_stdout, $pid); |
33 | } |
34 | |
35 | 1; |