As seen at http://codepoet.org/lists/uclibc/2004-March/008512.html:

Try the following (untested).  In .26, the field member was filedes.
Current cvs uses __filedes (double underscore prefix).

Manuel

--- perl-5.8.4.orig/perlio.c	2004-03-22 14:54:03.000000000 -0500
+++ perl-5.8.4/perlio.c	2005-03-09 04:33:49.386767312 -0500
@@ -2824,7 +2824,15 @@
     /* XXX this could use PerlIO_canset_fileno() and
      * PerlIO_set_fileno() support from Configure
      */
-#  if defined(__GLIBC__)
+#  if defined(__UCLIBC__)
+    /* uClibc must come before glibc because it defines __GLIBC__ as well. */
+#    if defined(__MASK_READING)
+    f->__filedes = -1;
+#    else
+    f->filedes = -1;
+#    endif
+    return 1;
+#  elif defined(__GLIBC__)
     /* There may be a better way for GLIBC:
     	- libio.h defines a flag to not close() on cleanup
      */