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:
#!perlmy $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<#!perlmy $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 "[email protected]", or through the web interface at <http://rt.cpan.org>.
AUTHOR
Elliot Shank "<[email protected]>"
COPYRIGHT
Copyright (c)2009-2010, Elliot Shank "<[email protected]>".
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.