I'd like to say I'm halfway through my perl module to wrap libgs (you know, Ghostscript) but in terms of what I still need to learn, maybe one-tenth done is more accurate.
Passing I/O references from C to Perl and back is a Major Arcanum. I got some good help on the perl-xs mailing list, but the fact that the sv_2io() function I evedently need to use for passing handles isn't formally documented anywhere is disquieting, especially when you further consider the fact that perldoc perlapi sez "The interfaces of any functions that are not listed here are subject to change without notice."
At one point I was working on the perl interface to libcurl; I wrote a hook into the progress callback so you could write your progress function in perl. Most of what libcurl is about is I/O, though, and some more clueful people than me stepped in to get that working. The threading requirement for libcurl is what really threw me for a loop; to me, the statement in the documented Ghostscript API that warns "At this stage, Ghostscript supports only one instance" is a great relief.
I guess I will need to experiment in several environments and look at (shudder) some of the Perl sources to make sure I can get things working ...