What problems are you having with Device::SerialPort? This example code from the 'Tied Filehandles' section of the manual looks like what you describe - tie the serial port then use getc.
$PortObj = tie (*FH, 'Device::SerialPort',$Config_File) || die "Can't
+tie: $!\n";
$char = getc FH;