A Perl-native XSLT processor does
exists. Unfortunately it hasn't been fully compliant with XSLT 1.0 specs,
and it is unacceptably slow. I recall someone said in perl-xml mailing list that it's even faster to spawn a Saxon process. I believe
could be much better than it is now, since there are lots of very good XSLT processors written in Java, so I think it's more a choice of good algorithm and proper data structures rather than
a language problem.
I've run XSLTMark on my own, comparing the XSLT 1.0 compliance and performance of Saxon (Java), Sablotron, LibXSLT, and Xalan C++.
Sablotron 0.70 - the latest version at this moment - fails on several tests, which indicates that it isn't fully XSLT 1.0 compliant, and the performance is not impressive.
The rest of them - LibXSLT, Saxon, and Xalan - are fully compliant.
And among these, LibXSLT is undoubtedly the speed demon. Xalan is the second.
But if you're afraid that at some level of complexity you can't deal with XSLT alone (or it's too complicated to solve in XSLT, see
Things XSLT Can't Do),
you may try XML::Xalan, the perl binding to Xalan C++. It allows users to write an XSLT extension function in Perl.
I know it lacks of several features, such as document validation, but currently it serves my need very well.
Untested on Win32, though, just on Linux only.