7 use Thread::Pool::Simple;
 
   9 if (eval { require PPI; 1 }) {
 
  10   plan tests => scalar(@Support::Files::testitems);
 
  12   plan skip_all => "PPI not installed";
 
  17     local $^W = 0;  # Don't complain about non-existent filehandles
 
  18     if (-e \*Test::More::TESTOUT) {
 
  19         $fh = \*Test::More::TESTOUT;
 
  20     } elsif (-e \*Test::Builder::TESTOUT) {
 
  21         $fh = \*Test::Builder::TESTOUT;
 
  27 my @testitems = @Support::Files::testitems;
 
  34     # due to a bug in PPI it cannot determine the encoding of a source file by
 
  35     # use utf8; normaly this would be no problem but some people instist on
 
  36     # putting strange stuff into the source. as a workaround read in the source
 
  37     # with :utf8 layer and pass it to PPI by reference
 
  38     # there are still some latin chars, but it's not the purpose of this test
 
  39     # to find them, so warnings about it will be ignored
 
  40     local $^W = 0; # don't care about invalid chars in comments
 
  42     open my $fh, '<:utf8', $file or die $!;
 
  46   my $doc = PPI::Document->new(\$source) or do {
 
  47     print $fh "?: PPI error for file $file: " . PPI::Document::errstr() . "\n";
 
  51   my $stmts = $doc->find('Statement::Variable');
 
  53   for my $var (@{ $stmts || [] }) {
 
  54     # local can have valid uses like this, and our is extremely uncommon
 
  55     next unless $var->type eq 'my';
 
  58     next unless $var->find(sub { $_[1]->content eq 'if' });
 
  60     # token "if" is not in the top level struvture - no problem
 
  61     # most likely an anonymous sub or a complicated map/grep/reduce
 
  62     next unless grep { $_->content eq 'if'  } $var->schildren;
 
  65     print $fh "?: $var \n";
 
  71 my $pool = Thread::Pool::Simple->new(
 
  73   max    => Sys::CPU::cpu_count() + 1,
 
  74   do     => [ \&test_file ],
 
  78 $pool->add($_) for @testitems;