You don't have to check for defined on the return from fcntl.
Like ioctl, it maps a 0
return from the system call into
"0 but true"
in Perl. This string is true in boolean context and 0
in numeric context. It is also exempt from the normal -w warnings
on improper numeric conversions.

Note that fcntl raises an exception if used on a machine that
doesn't implement fcntl(2). See the Fcntl module or your fcntl(2)
manpage to learn what functions are available on your system.

Here's an example of setting a filehandle named REMOTE
to be
non-blocking at the system level. You'll have to negotiate $|
on your own, though.