PPIx::Utilities::Node(3) User Contributed Perl Documentation PPIx::Utilities::Node(3)

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

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

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} ) {
        ...
    }
}

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

Nothing is exported by default.

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.)

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

Elliot Shank "<perl@galumph.com>"

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.

2022-05-29 perl v5.36.0