PPIx::Utilities::Node - Extensions to L.


PPIx-Utilities documentation  | view source Contained in the PPIx-Utilities distribution.

Index


NAME

Top

PPIx::Utilities::Node - Extensions to PPI::Node.

VERSION

Top

This document describes PPIx::Utilities::Node version 1.1.0.

SYNOPSIS

Top

    use PPIx::Utilities::Node qw< split_ppi_node_by_namespace >;

    my $dom = PPI::Document->new("...");

    while (
        my ($namespace, $sub_doms) = each split_ppi_node_by_namespace($dom)
    ) {
        foreach my $sub_dom ( @{$sub_doms} ) {
            ...
        }
    }




DESCRIPTION

Top

This is a collection of functions for dealing with PPI::Nodes.

INTERFACE

Top

Nothing is exported by default.

split_ppi_node_by_namespace($node)

Returns the sub-trees for each namespace in the node as a reference to a hash of references to arrays of PPI::Nodes. Say we've got the following code:

    #!perl

    my $x = blah();

    package Foo;

    my $y = blah_blah();

    {
        say 'Whee!';

        package Bar;

        something();
    }

    thingy();

    package Baz;

    da_da_da();

    package Foo;

    foreach ( blrfl() ) {
        ...
    }

Calling this function on a PPI::Document for the above returns a value that looks like this, using multi-line string literals for the actual code parts instead of PPI trees to make this easier to read:

    {
        main    => [
            q<
                #!perl

                my $x = blah();
            >,
        ],
        Foo     => [
            q<
                package Foo;

                my $y = blah_blah();

                {
                    say 'Whee!';

                }

                thingy();
            >,
            q<
                package Foo;

                foreach ( blrfl() ) {
                    ...
                }
            >,
        ],
        Bar     => [
            q<
                package Bar;

                something();
            >,
        ],
        Baz     => [
            q<
                package Baz;

                da_da_da();
            >,
        ],
    }

Note that the return value contains copies of the original nodes, and not the original nodes themselves due to the need to handle namespaces that are not file-scoped. (Notice how the first element for "Foo" above differs from the original code.)

BUGS AND LIMITATIONS

Top

Please report any bugs or feature requests to bug-ppix-utilities@rt.cpan.org, or through the web interface at http://rt.cpan.org.

AUTHOR

Top

Elliot Shank <perl@galumph.com>

COPYRIGHT

Top


PPIx-Utilities documentation  | view source Contained in the PPIx-Utilities distribution.