The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl

use File::Find;

$expr = '^\s*BEGIN\s*\{\s*unshift\s*\(\s*@INC\s*,(.*)\)\s*;?\s*\}\s*$';

@todo = ();

sub match
{
 if ($unsure)
  {
   return 1 unless (/#!.*perl/);
   $unsure = 0;
  }
 if (/$expr/o)
  {
   my $name = "$File::Find::dir/$file";
   print "$name:$.: $_";
   push(@todo,$name);
   return 1;
  }
 return 0;
}

sub wanted
{
 $File::Find::prune = 0;
 if (-x $_ && -T $_ && !/%$/)
  {
   local $unsure = !/\.p[ml]$/;
   local $file   = ($_);
   local ($_);
   open($file,"<$file") || die "Cannot open $file:$!";
   while (<$file>)
    {
     last if &match;
    }
   close($file);
  }
 elsif (-d $_)
  {
   $File::Find::prune = 1 if ($_ eq 'blib');
  }
}

@ARGV = '.' unless (@ARGV);

sub de_bak
{
 if (/^(.*)\.bak$/)
  {
   unlink("$1.oops");
   rename($1,"$1.oops") if (-f $1);
   rename($_,$1);
  }
}


# find(\&de_bak,@ARGV);

find(\&wanted,@ARGV);

print join(',',@todo),"\n";


$^I = ".bak";

if (@todo)
 {
  @ARGV = @todo;
  while (<>)
   {
    s/$expr/use lib ($1);\n/;
    print;
   }
 }