in reply to $perl_extension ? require SWIG : require XS;

In my opinion, swig is for people who just want to get something working, have little interest in distribution, and don't have any interest in learning perl XS. If you went through the modules on CPAN looking at the ones that import C into perl, you'd find that nearly all of them use XS.

I wouldn't call XS a wrapper either, it's actually perl's interface to call C functions natively. I could be semantically mistaken, but I think that's pretty close. XS can be tricky to learn, but I think it's worth it. I have loved every XS project I've completed so far.