After many years of doing maintenance work on various UNIX network daemons, I have gradually grown to believe that we do not have "reliable cross-platform methods of performing interface discovery", neither for Perl nor for C. In the case of Linux, the standard way was to parse /proc/net/dev (it is not that hard, even with C), even though recent libcs provide the if_nameindex API. For *BSD, coders usually rolled their own if_nameindex implementation, because the BSD libc does not seem to porvide the API (at least, back those days when the daemons were written, this was the case).
in reply to Network interface discovery
Note that I do not want to foster these programming practices. I just want to stress that this paticular problem is really hard to solve in a cross-platform-way...