In toke.c, in the part of code that sets the file descriptor for __DATA__,
there is this chunk of code :
#if defined(HAS_FCNTL) defined(F_SETFD)
{
const int fd = PerlIO_fileno(PL_rsfp);
fcntl(fd,F_SETFD,fd = 3);
}
#endif
The 3rd argument to fcntl() puzzles me.
It's supposed to be a sum of flags, not a boolean value. Thus it
doesn't look portable at all.
On Linux and BSD it looks like this code tries to set O_WRONLY on
the __DATA__ filehandle, which is obviously wrong (and won't
succeed anyway.) My fcntl(2) manpage says :
On Linux this command can only change the O_APPEND, O_ASYNC,
O_DIRECT, O_NOATIME, and O_NONBLOCK flags.
What's the sensible thing to do ?