Why sysread over read? The only difference is that read is buffered, which is a good thing. I'd replace sysread with read.
N* for floats?
I don't think a smaller than expected return value is an error. It simply means you need to call the read function again.
In reply to Re^2: reading binary files with Perl
in thread reading binary files with Perl