If you're lucky enough to be using a system that supports non-blocking reads (most Unixish systems do), you need only to use the
O_NDELAY or
O_NONBLOCK flag from the Fcntl module in conjunction with sysopen:
use Fcntl;
sysopen(FH, "/tmp/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
or die "can't open /tmp/somefile: $!":