use strict; use warnings; use Win32::SerialPort; my $loggedin = 0; my $term = Win32::SerialPort->new('COM1') or die "bad COM1\n"; $term->baudrate(9600); $term->databits(8); $term->parity("none"); $term->parity_enable(0); $term->stopbits(1); $term->handshake('xoff'); $term->user_msg(1); # misc. warnings $term->error_msg(1); # hardware and data errors $term->read_interval(1000); # max time between chars 1000 ms (1 sec) $term->read_interval(0xffffffff); # non-blocking read $term->write_settings; $term->write("\r"); my $esccount = 0; while ($prompt !~ /Supervisor Name :/) { die "$esccount attempts to contact the PBX have failed." if $esccount++ > 10; # loop sending ESCs until we get the login prompt $term->write("\e"); sleep 2; ($count, $prompt) = $term->read(2000); } # we should now be at the Supervisor Name prompt $term->write("REPORTS\r"); sleep 2; ($count, $prompt) = $term->read(2000); if ($prompt =~ /Password\s+:/) { $term->write("REPORTS\r"); sleep 3; ($count, $prompt) = $term->read(2000); if ($prompt =~ /Main Menu/) { $loggedin = 1; } } . . .