Devel::PPPort - Perl/Pollution/Portability

- NAME
- SYNOPSIS
- DESCRIPTION

- WriteFile

- ppport.h
- AUTHOR
- SEE ALSO

# NAME

Devel::PPPort - Perl/Pollution/Portability

# SYNOPSIS

        Devel::PPPort::WriteFile() ; # defaults to ./ppport.h
        Devel::PPPort::WriteFile('someheader.h') ;

# DESCRIPTION

Perl has changed over time, gaining new features, new functions, increasing its flexibility, and reducing the impact on the C namespace environment (reduced pollution). The header file, typicaly `ppport.h`, written by this module attempts to bring some of the newer Perl features to older versions of Perl, so that you can worry less about keeping track of old releases, but users can still reap the benefit.

    Why you should use C<ppport.h> in modern code: so that your code will work
    with the widest range of Perl interpreters possible, without significant
    additional work.

Why you should attempt older code to fully use `ppport.h`: because the reduced pollution of newer Perl versions is an important thing, so important that the old polluting ways of original Perl modules will not be supported very far into the future, and your module will almost certainly break! By adapting to it now, you'll gained compatibility and a sense of having done the electronic ecology some good.

How to use ppport.h: Don't direct the user to download `Devel::PPPort`, and don't make `ppport.h` optional. Rather, just take the most recent copy of `ppport.h` that you can find (probably in `Devel::PPPort` on CPAN), copy it into your project, adjust your project to use it, and distribute the header along with your module.

`Devel::PPPort` contains a single function, called `WriteFile`. It's purpose is to write a 'C' header file that is used when writing XS modules. The file contains a series of macros that allow XS modules to be built using older versions of Perl.

This module is used by h2xs to write the file ppport.h.

## WriteFile

`WriteFile` takes a zero or one parameters. When called with one parameter it expects to be passed a filename. When called with no parameters, it defults to the filename `./pport.h`.

The function returns TRUE if the file was written successfully. Otherwise it returns FALSE.

# ppport.h

The file written by this module, typically `ppport.h`, provides access to the following Perl API if not already available (and in some cases [*] even if available, access to a fixed interface):

        aMY_CXT
        aMY_CXT_
        _aMY_CXT
        aTHX
        aTHX_
        AvFILLp
        boolSV(b)
        call_argv
        call_method
        call_pv
        call_sv
        dAX
        DEFSV
        dITEMS
        dMY_CXT
        dMY_CXT_SV
        dNOOP
        dTHR
        dTHX
        dTHXa
        dTHXoa
        ERRSV
        get_av
        get_cv
        get_hv
        get_sv
        grok_hex
        grok_oct
        grok_bin
        grok_number
        grok_numeric_radix
        gv_stashpvn(str,len,flags)
        INT2PTR(type,int)
        IVdf
        MY_CXT
        MY_CXT_INIT
        newCONSTSUB(stash,name,sv)
        newRV_inc(sv)
        newRV_noinc(sv)
        newSVpvn(data,len)
        NOOP
        NV
        NVef
        NVff
        NVgf
        PERL_REVISION
        PERL_SUBVERSION
        PERL_UNUSED_DECL
        PERL_VERSION
        PL_compiling
        PL_copline
        PL_curcop
        PL_curstash
        PL_defgv
        PL_dirty
        PL_hints
        PL_na
        PL_perldb
        PL_rsfp_filters
        PL_rsfpv
        PL_stdingv
        PL_Sv
        PL_sv_no
        PL_sv_undef
        PL_sv_yes
        pMY_CXT
        pMY_CXT_
        _pMY_CXT
        pTHX
        pTHX_
        PTR2IV(ptr)
        PTR2NV(ptr)
        PTR2ul(ptr)
        PTR2UV(ptr)
        SAVE_DEFSV
        START_MY_CXT
        SvPVbyte(sv,lp) [*]
        UVof
        UVSIZE
        UVuf
        UVxf
        UVXf

# AUTHOR

Version 1.x of Devel::PPPort was written by Kenneth Albanowski.

Version 2.x was ported to the Perl core by Paul Marquess.

# SEE ALSO

See h2xs.

Devel::PPPort - Perl/Pollution/Portability