use strict; use warnings; use Test::More tests => 5; use AnyEvent::Subprocess; my $proc = AnyEvent::Subprocess->new( delegates => [ 'CompletionCondvar', 'StandardHandles', { Handle => { name => 'extra_in', direction => 'w', replace => 3, }}, { Handle => { name => 'extra_out', direction => 'r', replace => 4, }}, { Capture => { handle => 'stdout' }}, { Capture => { handle => 'stderr' }}, { Capture => { name => 'extra_capture', handle => 'extra_out', }}, ], code => sub { open my $extra_in, '<&=3' or die "Failed to open fd 3: $!"; open my $extra_out, '>&=4' or die "Failed to open fd 4: $!"; my $stdin = ; print {*STDOUT} "Got: $stdin"; my $extra_input = <$extra_in>; print {$extra_out} "Got: $extra_input"; print {*STDERR} "No errors\n"; }, ); ok $proc; my $run = $proc->run; my $condvar = $run->delegate('completion_condvar'); $run->delegate('stdin')->handle->push_write("stdin\n"); $run->delegate('extra_in')->handle->push_write("extra_in\n"); my $done = $condvar->recv; ok $done->is_success, 'exited ok'; is $done->delegate('stdout_capture')->output, "Got: stdin\n", 'got stdin'; is $done->delegate('extra_capture')->output, "Got: extra_in\n", 'got extra_in'; is $done->delegate('stderr_capture')->output, "No errors\n", 'no errors on stderr';