Throwing in more detail, the I/O poller module is Gtk2::Helper, whose documentation warns: "you should not use Perl's builtin read and write functions here because these operate always with buffered I/O. Use low level sysread() and syswrite() instead."
I'm not really sure what to construe of that. sysread() needs a size -- should I just read one byte at a time as Grimy suggested above? Am I doing this all wrong by using Perl's buffered I/O? (The code behaves as expected even if I use my current style.)