#!/usr/bin/perl use warnings; use strict; use IPC::Open3; my $pid = open3(\*WRITE, \*READ, \*ERROR,"your_command"); if( ! $pid ){ die "$!\n";} #my $pid = open3(\*WRITE, \*READ,0,"your_command"); #if \*ERROR is false, STDERR is sent to STDOUT #while(1){ print "Enter a string to evaluate\n"; chomp(my $query = ); #send query to command print WRITE "$query\n"; #give small time to output select(undef,undef,undef,.5); #half second delay #get the answer from command chomp(my $answer = ); print "$query = $answer\n"; # you may need something with sysread, if hangs # my $bytes_read = sysread(READ, my $buf, 1024); # print "$query = $buf\n"; #get the error from command chomp(my $error = ); print "$query error = $error\n"; #} waitpid($pid, 1); # It is important to waitpid on your child process, # otherwise zombies could be created.