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 \s-1PPI\s0 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 \*(L"Foo\*(R" above differs from the original code.)

BUGS AND LIMITATIONS

Please report any bugs or feature requests to \*(C`[email protected]\*(C', or through the web interface at <http://rt.cpan.org>.

AUTHOR

Elliot Shank \*(C`<[email protected]>\*(C'

COPYRIGHT

Copyright (c)2009-2010, Elliot Shank \*(C`<[email protected]>\*(C'.

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 \s-1LICENSE\s0 file included with this module.