#!/usr/bin/perl -w use strict; use IPC::Run qw( start pump finish timeout ); my @tok_program = 'cat'; my ($TOK_IN, $TOK_OUT, $TOK_ERR); my $TOK = start \@tok_program, '<', \$TOK_IN, '1>pty>', \$TOK_OUT, '2>', \$TOK_ERR or die "Error: $?;\n"; while (my $line = ) { # Send input. $TOK_IN = $line; pump $TOK while length $TOK_IN; # Wait for output. pump $TOK while $TOK_OUT !~ /\n\z/; print "out: $TOK_OUT"; $TOK_OUT = ''; } finish $TOK or die "returned $?";