PPIx::Utilities::Node.3pm

Langue: en

Version: 2010-03-14 (fedora - 01/12/10)

Section: 3 (Bibliothèques de fonctions)

NAME

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

VERSION

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

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