On Fri, Mar 21, 2003 at 01:11:04PM -0600, Dave Rolsky wrote:
> On Fri, 21 Mar 2003, fglock wrote:
>
> > Dave Rolsky wrote:
> > > I suppose I could include a pure Perl solution. What is your barrier to
> > > using XS?
> >
> > That's something I'd like too.
> >
> > I could test my code on Windows, without having to wait until someone
> > compiles it for me.
>
> Ok, I'll implement this for the next release. It's simple enough since
> all the code existed in Perl previously.
Having transparent failover is handy.
You can wrap the "bootstrap" call in an eval { }. Then you've got
a few choices, either put the perl versions of the XS subs at the
end after __DATA__ and add "use SelfLoader;", or do a require of a
separate module with the perl code. I'd suggest the later, it's
what the DBI uses to load DBI::PurePerl.
Another key issue is the need to automatically test both XS and
pure perl versions. The DBI has a cute trick for this. For every
t/*.t file the Makefile.PL writes a t/zz_*.t that just contains:
#!perl -w
$ENV{DBI_PUREPERL}=2;
do 't/test-name-here.t' or warn $!;
die if $@;
exit 0
The env var triggers the DBI to not even try to bootstrap the XS
code but go straight to loading the pure-perl code.
Having this automated has caught countless would-be-bugs as the DBI
and it's test suite has evolved.
Tim.