1#!/usr/bin/perl -w 2use Data::Dumper; 3 4my $targ = shift; 5my $inc = join(' ',map("-I$_",@INC)); 6 7my $work = 1; 8while ($work) 9 { 10 open(PIPE,"$^X -w $inc -M$targ -e '' 2>&1 |") || die "Cannot open pipe to child:$!"; 11 my %fix; 12 while (<PIPE>) 13 { 14 if (/^Ambiguous call resolved as CORE::(\w+)\(\), qualify as such or use \& at (\S+) line (\d+)/ 15 && -f $2 ) 16 { 17 my ($var,$file,$line) = ($1,$2,$3); 18 $fix{$file} = [] unless exists $fix{$file}; 19 push(@{$fix{$file}},[$line => $var]) unless ($var =~ /^PL_/ || $file =~ /\.h$/); 20 } 21 print; 22 } 23 close(PIPE); 24# warn "Make retured $?\n"; 25# last unless $?; 26 my $changed = 0; 27 foreach my $file (keys %fix) 28 { 29 my @ar = sort( { $a->[0] <=> $b->[0] } @{delete $fix{$file}}); 30 my @miss; 31 my $fixed = 0; 32 @ARGV = ($file); 33 $. = 0; 34 local $^I = '.sav'; 35 while (<>) 36 { 37 while (@ar && $. == $ar[0][0]) 38 { 39 my ($line,$var) = @{shift(@ar)}; 40 if (s/(?<!CORE::)\b$var\b(?=\s*\()/CORE::$var/) 41 { 42 warn "$file:$line: FIX $var\n"; 43 $fixed++; 44 $changed++; 45 } 46 else 47 { 48 push(@miss,[$line,$var,$_]); 49 } 50 } 51 print; 52 } 53 unless ($fixed) 54 { 55 rename("$file$^I",$file); 56 if (@miss) 57 { 58 while (@miss) 59 { 60 my ($line,$var,$txt) = @{shift(@miss)}; 61 warn "$file:$line:$var | $txt"; 62 } 63 } 64 } 65 } 66 last unless $changed; 67 } 68 69