---
name: "PPIx::Utilities::Node"
section: "3pm"
platform: "linux"
package: "perl-ppix-utilities"
version: "1.001000-10"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/PPIx::Utilities::Node"
---

# PPIx::Utilities::Node(3pm)

Extensions to PPI::Node.

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