| File-Find-Rule-PPI documentation | Contained in the File-Find-Rule-PPI distribution. |
File::Find::Rule::PPI - Add support for PPI queries to File::Find::Rule
use File::Find::Rule ();
use File::Find::Rule::PPI ();
# Find all perl modules that use here-docs
my $Find = File::Find::Rule->file
->name('*.pm')
->ppi_find_any('Token::HereDoc');
my @heredoc = $Find->in( $dir );
File::Find::Rule::PPI allows you to integrate PPI content queries into your File::Find::Rule searches.
Initially, it provides the one additional method ppi_find_any,
which takes an argument identical to the PPI::Node method find_any
and checks each file as a perl document to see if matches the query.
The ppi_find_any method causes a query identical to (and implemented
using) PPI::Node's find_any method.
It takes as argument any condition that would also be valid for the above method.
In addition, it can also take as argument an instantiated PPI::Find
object, and will use that object's any_matches method to achieve the
same effect.
If you provide no or an illegal condition to ppi_find_any, the check will always fail, and no files will be returned when you execute the search.
Bugs should always be submitted via the CPAN bug tracker
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-Find-Rule-PPI
For other issues, contact the maintainer
Adam Kennedy <adamk@cpan.org>
Funding provided by The Perl Foundation
Copyright 2005 - 2010 Adam Kennedy.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
| File-Find-Rule-PPI documentation | Contained in the File-Find-Rule-PPI distribution. |
package File::Find::Rule::PPI;
use 5.005; use strict; use Params::Util 0.10 '_INSTANCE'; use File::Find::Rule 0.20 (); use PPI 1.000 (); use vars qw{$VERSION @ISA @EXPORT}; BEGIN { $VERSION = '1.06'; @ISA = 'File::Find::Rule'; @EXPORT = @File::Find::Rule::EXPORT; # Preload PPI::Find module if needed and possible eval "use prefork => 'PPI::Find';"; } ##################################################################### # Add the methods to File::Find::Rule
sub File::Find::Rule::ppi_find_any { require PPI; my $self = shift()->_force_object; # Is this a PPI::Find object if ( _INSTANCE($_[0], 'PPI::Find') ) { require PPI::Find; my $Find = shift; return $self->exec( sub { my $Document = PPI::Document->new($_) or return; $Find->any_matches or return; 1; } ); } # Normal Document->find_any test my $condition = PPI::Node->_wanted(shift); # If you want to find crap, you never will return $self->discard unless $condition; # Add the query for a valid condition $self->exec( sub { my $Document = PPI::Document->new($_) or return; $Document->find_any( $condition ) or return; 1; } ); } 1;