The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
#
# Simple command-line terminal emulator
# by Andrej Mikus
# with small modifications by Bill Birthisel
# no local echo at either end
#

use lib './blib/lib','../blib/lib'; # can run from here or distribution base
use Device::SerialPort 0.05;
use Term::ReadKey;

use strict;

my $file = "/dev/ttyS0";
my $ob = Device::SerialPort->new ($file) or die "Can't start $file\n";
    # next test will die at runtime unless $ob

my $c;
my $p1 = "Simple Terminal Emulator\n";
$p1 .= "Type CAPITAL Q to quit\n\n";
print $p1;
$p1 =~ s/\n/\r\n/ogs;
$ob->write ($p1);

for ( ;; ) {
    if ( $c = $ob -> input ) {
	$c =~ s/\r/\n/ogs;
	print $c;
	last if $c =~ /Q/;
	$c =~ s/\n/\r\n/ogs;
        $ob -> write ( $c );
    }
        
    if ( defined ( $c = ReadKey ( -1 ) ) ) {
	$c =~ s/\r/\n/ogs;
	$c =~ s/\n/\r\n/ogs;
        $ob -> write ( $c );
	last if $c eq 'Q';
    }
    select undef, undef, undef, 0.04; # 25/sec.
}

$ob -> close or die "Close failed: $!\n";
undef $ob;  # closes port AND frees memory in perl