#!/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; } }