phpman > perldoc > DBI::PurePerl(3pm)

Markdown | JSON | MCP    

NAME
    DBI::PurePerl -- a DBI emulation using pure perl (no C/XS compilation required)

SYNOPSIS
     BEGIN { $ENV{DBI_PUREPERL} = 2 }
     use DBI;

DESCRIPTION
    This is a pure perl emulation of the DBI internals. In almost all cases you will be better off
    using standard DBI since the portions of the standard version written in C make it *much*
    faster.

    However, if you are in a situation where it isn't possible to install a compiled version of
    standard DBI, and you're using pure-perl DBD drivers, then this module allows you to use most
    common features of DBI without needing any changes in your scripts.

EXPERIMENTAL STATUS
    DBI::PurePerl is new so please treat it as experimental pending more extensive testing. So far
    it has passed all tests with DBD::CSV, DBD::AnyData, DBD::XBase, DBD::Sprite, DBD::mysqlPP.
    Please send bug reports to Jeff Zucker at <jeff AT vpservices.com> with a cc to <dbi-dev AT perl.org>.

USAGE
    The usage is the same as for standard DBI with the exception that you need to set the
    environment variable DBI_PUREPERL if you want to use the PurePerl version.

     DBI_PUREPERL == 0 (the default) Always use compiled DBI, die
                       if it isn't properly compiled & installed

     DBI_PUREPERL == 1 Use compiled DBI if it is properly compiled
                       & installed, otherwise use PurePerl

     DBI_PUREPERL == 2 Always use PurePerl

    You may set the environment variable in your shell (e.g. with set or setenv or export, etc) or
    else set it in your script like this:

     BEGIN { $ENV{DBI_PUREPERL}=2 }

    before you "use DBI;".

INSTALLATION
    In most situations simply install DBI (see the DBI pod for details).

    In the situation in which you can not install DBI itself, you may manually copy DBI.pm and
    PurePerl.pm into the appropriate directories.

    For example:

     cp DBI.pm      /usr/jdoe/mylibs/.
     cp PurePerl.pm /usr/jdoe/mylibs/DBI/.

    Then add this to the top of scripts:

     BEGIN {
       $ENV{DBI_PUREPERL} = 1;      # or =2
       unshift @INC, '/usr/jdoe/mylibs';
     }

    (Or should we perhaps patch Makefile.PL so that if DBI_PUREPERL is set to 2 prior to make, the
    normal compile process is skipped and the files are installed automatically?)

DIFFERENCES BETWEEN DBI AND DBI::PurePerl
  Attributes
    Boolean attributes still return boolean values but the actual values used may be different,
    i.e., 0 or undef instead of an empty string.

    Some handle attributes are either not supported or have very limited functionality:

      ActiveKids
      InactiveDestroy
      AutoInactiveDestroy
      Kids
      Taint
      TaintIn
      TaintOut

    (and probably others)

  Tracing
    Trace functionality is more limited and the code to handle tracing is only embedded into
    DBI:PurePerl if the DBI_TRACE environment variable is defined. To enable total tracing you can
    set the DBI_TRACE environment variable as usual. But to enable individual handle tracing using
    the trace() method you also need to set the DBI_TRACE environment variable, but set it to 0.

  Parameter Usage Checking
    The DBI does some basic parameter count checking on method calls. DBI::PurePerl doesn't.

  Speed
    DBI::PurePerl is slower. Although, with some drivers in some contexts this may not be very
    significant for you.

    By way of example... the test.pl script in the DBI source distribution has a simple benchmark
    that just does:

        my $null_dbh = DBI->connect('dbi:NullP:','','');
        my $i = 10_000;
        $null_dbh->prepare('') while $i--;

    In other words just prepares a statement, creating and destroying a statement handle, over and
    over again. Using the real DBI this runs at ~4550 handles per second whereas DBI::PurePerl
    manages ~2800 per second on the same machine (not too bad really).

  May not fully support hash()
    If you want to use type 1 hash, i.e., "hash($string,1)" with DBI::PurePerl, you'll need version
    1.56 or higher of Math::BigInt (available on CPAN).

  Doesn't support preparse()
    The DBI->preparse() method isn't supported in DBI::PurePerl.

  Doesn't support DBD::Proxy
    There's a subtle problem somewhere I've not been able to identify. DBI::ProxyServer seem to work
    fine with DBI::PurePerl but DBD::Proxy does not work 100% (which is sad because that would be
    far more useful :) Try re-enabling t/80proxy.t for DBI::PurePerl to see if the problem that
    remains will affect you're usage.

  Others
      can() - doesn't have any special behaviour

    Please let us know if you find any other differences between DBI and DBI::PurePerl.

AUTHORS
    Tim Bunce and Jeff Zucker.

    Tim provided the direction and basis for the code. The original idea for the module and most of
    the brute force porting from C to Perl was by Jeff. Tim then reworked some core parts to boost
    the performance and accuracy of the emulation. Thanks also to Randal Schwartz and John Tobey for
    patches.

COPYRIGHT
    Copyright (c) 2002 Tim Bunce Ireland.

    See COPYRIGHT section in DBI.pm for usage and distribution rights.

DBI::PurePerl(3pm)
NAME SYNOPSIS DESCRIPTION EXPERIMENTAL STATUS USAGE INSTALLATION
Attributes Tracing Parameter Usage Checking Speed Others
AUTHORS COPYRIGHT

Generated by phpman v4.0 Author: Che Dong Under GNU General Public License
2026-06-16 03:34 @216.73.217.83
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top