The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#define PERL_NO_GET_CONTEXT

#ifdef MOD_PERL

#include "mod_perl.h"

#else

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#endif

MODULE = Apache::Peek   PACKAGE = Apache::Peek

void
Dump(sv, lim=4)
    SV *sv
    I32	lim

    PPCODE:
    {
    SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
    STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
    SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
    I32 save_dumpindent = PL_dumpindent;
    request_rec *r = modperl_global_request(aTHX_ NULL);
    PerlIO *fp = PerlIO_tmpfile();
    modperl_config_req_t *rcfg = modperl_config_req_get(r);
    char tmpbuf[256];
    int count;
    
    PL_dumpindent = 2;
    
    do_sv_dump(0, fp, sv, 0, lim, dumpop && SvTRUE(dumpop), pv_lim);
    PerlIO_rewind(fp);
    
    while ( (count = PerlIO_read(fp, tmpbuf, sizeof(tmpbuf))) > 0) {
        MP_RUN_CROAK(modperl_wbucket_write(aTHX_ rcfg->wbucket,
                                           tmpbuf, &count),
                     "Apache::Peek::write");
    }
    PerlIO_close(fp);
    PL_dumpindent = save_dumpindent;
    }