++ed by:

1 non-PAUSE user(s).

Elliot Shank

NAME

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

VERSION

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

SYNOPSIS

    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

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

INTERFACE

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

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

Elliot Shank <perl@galumph.com>

COPYRIGHT

Copyright (c)2009-2010, Elliot Shank <perl@galumph.com>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of this license can be found in the LICENSE file included with this module.




Hosting generously
sponsored by Bytemark