As an alternative to Expect, you could try IPC::Open3 (or IPC::Run or any of them), to run your script in an "expect like manner". Check out the faq entry
8.25: How can I capture STDERR from an external command?
You can also use the Searchbox and search for "IPC". A super-simplified barebones example is below. IPC::OPen3 may not work in your particular case, and there can be many reasons why. In a real situation, you need to process the STDOUT and STDERR outputs with alot of regex's, then determine what reply to send to STDIN.
#!/usr/bin/perl
use warnings;
use strict;
use IPC::Open3;
#interface to "bc" calculator
#my $pid = open3(\*WRITE, \*READ, \*ERROR,"bc");
my $pid = open3(\*WRITE, \*READ,0,"bc");
#if \*ERROR is false, STDERR is sent to STDOUT
while(1){
print "Enter expression for bc, i.e. 2 + 2\n";
chomp(my $query = <STDIN>);
#send query to bc
print WRITE "$query\n";
#give bc time to output
select(undef,undef,undef,.5);
#get the answer from bc
chomp(my $answer = <READ>);
print "$query = $answer\n";
}
waitpid($pid, 1);
# It is important to waitpid on your child process,
# otherwise zombies could be created.
|