NAME
PPIx::Element::Sub - Find subroutines associated with any element.
VERSION
version 0.001000
SYNOPSIS
use PPIx::Element::Sub qw( identify_associated_sub );
my $assoc_sub = identify_associated_sub( $comment_element );
DESCRIPTION
This module contains a handful of utility functions for finding logical PPI
nodes in the relative proximity of any given element
.
It contains three primary exportable utility functions:
identify_sub
- Find a logically enclosing subidentify_next_sub
- Find a logically succeeding subidentify_associated_sub
- Find a logically enclosing sub, or if none, a logically succeeding sub.
FUNCTIONS
identify_sub
Given an element
, ascertain the logical sub
that contains it.
my $sub = identify_sub( $element )
Due to structure of PPI
documents, this is simply the nearest parent
of element
that is a sub
, which could be the element
itself.
package Foo; # undef
# ↑
sub # sub 'bar'
bar # ↑
{ # ↑
# ↑
} # ↑
# undef
Returns undef
if no sub
parent can be derived.
identify_next_sub
Given an element
, ascertain the next sub
that appears logically after it in the document.
my $sub = identify_next_sub( $element );
Returns undef
if no next
<sub> can be found.
package Foo; # sub 'bar'
# ↑
sub # quux
bar # ↑
{ # ↑
# ↑
} # ↑
# ↑
sub quux # undef
{ # ↑
} # ↑
identify_associated_sub
This is a combination of identify_sub
and identify_next_sub
aimed at comments, as logically, any comment inside a sub
pertains to the sub
itself, but any comment before a sub
may also pertain to that sub
.
my $sub = identify_associated_sub( $element );
Any element
inside a sub
is associated with the sub
itself.
Any element
before a sub
is associated with the subsequent sub
package Foo; # sub 'bar'
# ↑
sub # ↑
bar # ↑
{ # ↑
# ↑
} # ↑
# sub 'quux'
sub quux # ↑
{ # ↑
} # ↑
# undef
Returns undef
if no sub
can be determined.
AUTHOR
Kent Fredric <kentnl@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by Kent Fredric <kentfredric@gmail.com>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.