ActivePerl使うと、ファイルオープンな感覚でCOMポートから流れてくる文字を受け取れるらしい。

#!C:/Perl/bin/perl.exe -w  use strict;  open( my $port , "+>COM3" ) || die "Can't open COM3: $!"; while(){   my $serial = $port;   print $serial; }  __END__

こんな感じ。
マルチスレッドとかにして、ファイルハンドルをフックすれば使えるアプリができるかも??