Browse Source

Make all perl scripts use static and warnings, to ease catching errors.

Guillem Jover 19 years ago
parent
commit
0ad63425d0

+ 8 - 0
ChangeLog

@@ -1,3 +1,11 @@
+2007-01-15  Guillem Jover  <guillem@debian.org>
+
+	* scripts/dpkg-gettext.pl: Remove duplicate 'use static'.
+	* scripts/cleanup-info.pl: Use static and warnings.
+	* scripts/dpkg-divert.pl: Likewise. Declare variables with 'my'.
+	* scripts/dpkg-statoverride.pl: Likewise.
+	* scripts/update-alternatives.pl: Likewise.
+
 2007-01-12  Mark Rosenstand  <mark@borkware.net>
 2007-01-12  Mark Rosenstand  <mark@borkware.net>
 
 
 	* src/help.c (checkpath): Check for the value of the macro
 	* src/help.c (checkpath): Check for the value of the macro

+ 1 - 0
debian/changelog

@@ -11,6 +11,7 @@ dpkg (1.14.0) UNRELEASED; urgency=low
   * Do not bail out in dpkg when building without start-stop-daemon support,
   * Do not bail out in dpkg when building without start-stop-daemon support,
     by checking if the macro value is true instead of it being defined.
     by checking if the macro value is true instead of it being defined.
     Thanks to Mark Rosenstand.
     Thanks to Mark Rosenstand.
+  * Make all perl scripts use static and warnings, to ease catching errors.
 
 
   [ Updated dpkg translations ]
   [ Updated dpkg translations ]
   * Romanian (Eddy Petrișor).
   * Romanian (Eddy Petrișor).

+ 2 - 2
scripts/cleanup-info.pl

@@ -21,8 +21,8 @@
 # using the man pages.  Hopefully this is a short enough program to
 # using the man pages.  Hopefully this is a short enough program to
 # debug.
 # debug.
 
 
-# don't put that in for production.
-# use strict;
+use strict;
+use warnings;
 
 
 my $dpkglibdir = "."; # This line modified by Makefile
 my $dpkglibdir = "."; # This line modified by Makefile
 push(@INC,$dpkglibdir);
 push(@INC,$dpkglibdir);

+ 38 - 19
scripts/dpkg-divert.pl

@@ -1,15 +1,18 @@
 #!/usr/bin/perl --
 #!/usr/bin/perl --
 
 
-$version= '1.0.11'; # This line modified by Makefile
-$admindir= "/var/lib/dpkg"; # This line modified by Makefile
-$dpkglibdir= "../utils"; # This line modified by Makefile
+use strict;
+use warnings;
+
+my $version = '1.0.11'; # This line modified by Makefile
+my $admindir = "/var/lib/dpkg"; # This line modified by Makefile
+my $dpkglibdir = "../utils"; # This line modified by Makefile
 ($0) = $0 =~ m:.*/(.+):;
 ($0) = $0 =~ m:.*/(.+):;
 
 
 push (@INC, $dpkglibdir);
 push (@INC, $dpkglibdir);
 require 'dpkg-gettext.pl';
 require 'dpkg-gettext.pl';
 textdomain("dpkg");
 textdomain("dpkg");
 
 
-$enoent=`$dpkglibdir/enoent` || die sprintf(_g("Cannot get ENOENT value from %s: %s"), "$dpkglibdir/enoent", $!);
+my $enoent = `$dpkglibdir/enoent` || die sprintf(_g("Cannot get ENOENT value from %s: %s"), "$dpkglibdir/enoent", $!);
 sub ENOENT { $enoent; }
 sub ENOENT { $enoent; }
 
 
 sub version {
 sub version {
@@ -53,12 +56,23 @@ Package preinst/postrm scripts should always specify --package and --divert.
 "), $0);
 "), $0);
 }
 }
 
 
-$testmode= 0;
-$dorename= 0;
-$verbose= 1;
-$mode='';
+my $testmode = 0;
+my $dorename = 0;
+my $verbose = 1;
+my $mode = '';
+my $package = '';
+my $divertto = '';
+my @contest;
+my @altname;
+my @package;
+my $file;
 $|=1;
 $|=1;
 
 
+
+# FIXME: those should be local.
+my ($rsrc, $rdest);
+my (@ssrc, @sdest);
+
 sub checkmanymodes {
 sub checkmanymodes {
     return unless $mode;
     return unless $mode;
     &badusage(sprintf(_g("two modes specified: %s and --%s"), $_, $mode));
     &badusage(sprintf(_g("two modes specified: %s and --%s"), $_, $mode));
@@ -130,7 +144,7 @@ if ($mode eq 'add') {
     $divertto= "$file.distrib" unless defined($divertto);
     $divertto= "$file.distrib" unless defined($divertto);
     $divertto =~ m#^/# || &badusage(sprintf(_g("filename \"%s\" is not absolute"), $divertto));
     $divertto =~ m#^/# || &badusage(sprintf(_g("filename \"%s\" is not absolute"), $divertto));
     $package= ':' unless defined($package);
     $package= ':' unless defined($package);
-    for ($i=0; $i<=$#contest; $i++) {
+    for (my $i = 0; $i <= $#contest; $i++) {
         if ($contest[$i] eq $file || $altname[$i] eq $file ||
         if ($contest[$i] eq $file || $altname[$i] eq $file ||
             $contest[$i] eq $divertto || $altname[$i] eq $divertto) {
             $contest[$i] eq $divertto || $altname[$i] eq $divertto) {
             if ($contest[$i] eq $file && $altname[$i] eq $divertto &&
             if ($contest[$i] eq $file && $altname[$i] eq $divertto &&
@@ -152,15 +166,15 @@ if ($mode eq 'add') {
 } elsif ($mode eq 'remove') {
 } elsif ($mode eq 'remove') {
     @ARGV == 1 || &badusage(sprintf(_g("--%s needs a single argument"), "remove"));
     @ARGV == 1 || &badusage(sprintf(_g("--%s needs a single argument"), "remove"));
     $file= $ARGV[0];
     $file= $ARGV[0];
-    for ($i=0; $i<=$#contest; $i++) {
+    for (my $i = 0; $i <= $#contest; $i++) {
         next unless $file eq $contest[$i];
         next unless $file eq $contest[$i];
         &quit(sprintf(_g("mismatch on divert-to\n  when removing \`%s'\n  found \`%s'"), &infoa, &infon($i)))
         &quit(sprintf(_g("mismatch on divert-to\n  when removing \`%s'\n  found \`%s'"), &infoa, &infon($i)))
               if defined($divertto) && $altname[$i] ne $divertto;
               if defined($divertto) && $altname[$i] ne $divertto;
         &quit(sprintf(_g("mismatch on package\n  when removing \`%s'\n  found \`%s'"), &infoa, &infon($i)))
         &quit(sprintf(_g("mismatch on package\n  when removing \`%s'\n  found \`%s'"), &infoa, &infon($i)))
               if defined($package) && $package[$i] ne $package;
               if defined($package) && $package[$i] ne $package;
         printf(_g("Removing \`%s'")."\n", &infon($i)) if $verbose > 0;
         printf(_g("Removing \`%s'")."\n", &infon($i)) if $verbose > 0;
-        $orgfile= $contest[$i];
-        $orgdivertto= $altname[$i];
+        my $orgfile = $contest[$i];
+        my $orgdivertto = $altname[$i];
         @contest= (($i > 0 ? @contest[0..$i-1] : ()),
         @contest= (($i > 0 ? @contest[0..$i-1] : ()),
                    ($i < $#contest ? @contest[$i+1..$#contest] : ()));
                    ($i < $#contest ? @contest[$i+1..$#contest] : ()));
         @altname= (($i > 0 ? @altname[0..$i-1] : ()),
         @altname= (($i > 0 ? @altname[0..$i-1] : ()),
@@ -176,15 +190,16 @@ if ($mode eq 'add') {
     printf(_g("No diversion \`%s', none removed")."\n", &infoa) if $verbose > 0;
     printf(_g("No diversion \`%s', none removed")."\n", &infoa) if $verbose > 0;
     exit(0);
     exit(0);
 } elsif ($mode eq 'list') {
 } elsif ($mode eq 'list') {
-    @ilist= @ARGV ? @ARGV : ('*');
+    my @list;
+    my @ilist = @ARGV ? @ARGV : ('*');
     while (defined($_=shift(@ilist))) {
     while (defined($_=shift(@ilist))) {
         s/\W/\\$&/g;
         s/\W/\\$&/g;
         s/\\\?/./g;
         s/\\\?/./g;
         s/\\\*/.*/g;
         s/\\\*/.*/g;
         push(@list,"^$_\$");
         push(@list,"^$_\$");
     }
     }
-    $pat= join('|',@list);
-    for ($i=0; $i<=$#contest; $i++) {
+    my $pat = join('|', @list);
+    for (my $i = 0; $i <= $#contest; $i++) {
         next unless ($contest[$i] =~ m/$pat/o ||
         next unless ($contest[$i] =~ m/$pat/o ||
                      $altname[$i] =~ m/$pat/o ||
                      $altname[$i] =~ m/$pat/o ||
                      $package[$i] =~ m/$pat/o);
                      $package[$i] =~ m/$pat/o);
@@ -194,7 +209,7 @@ if ($mode eq 'add') {
 } elsif ($mode eq 'truename') {
 } elsif ($mode eq 'truename') {
     @ARGV == 1 || &badusage(sprintf(_g("--%s needs a single argument"), "truename"));
     @ARGV == 1 || &badusage(sprintf(_g("--%s needs a single argument"), "truename"));
     $file= $ARGV[0];
     $file= $ARGV[0];
-    for ($i=0; $i<=$#contest; $i++) {
+    for (my $i = 0; $i <= $#contest; $i++) {
 	next unless $file eq $contest[$i];
 	next unless $file eq $contest[$i];
 	print $altname[$i], "\n";
 	print $altname[$i], "\n";
 	exit(0);
 	exit(0);
@@ -226,7 +241,7 @@ sub checkrename {
     # same name as the diversions but with an extension that
     # same name as the diversions but with an extension that
     # (hopefully) wont overwrite anything. If it succeeds, we
     # (hopefully) wont overwrite anything. If it succeeds, we
     # assume a writable filesystem.
     # assume a writable filesystem.
-    foreach $file ($rsrc,$rdest) {
+    foreach my $file ($rsrc, $rdest) {
 	if (open (TMP, ">> ${file}.dpkg-devert.tmp")) {
 	if (open (TMP, ">> ${file}.dpkg-devert.tmp")) {
 		close TMP;
 		close TMP;
 		unlink ("${file}.dpkg-devert.tmp");
 		unlink ("${file}.dpkg-devert.tmp");
@@ -259,7 +274,7 @@ sub save {
     return if $testmode;
     return if $testmode;
     open(N,"> $admindir/diversions-new") || &quit(sprintf(_g("create diversions-new: %s"), $!));
     open(N,"> $admindir/diversions-new") || &quit(sprintf(_g("create diversions-new: %s"), $!));
     chmod 0644, "$admindir/diversions-new";
     chmod 0644, "$admindir/diversions-new";
-    for ($i=0; $i<=$#contest; $i++) {
+    for (my $i = 0; $i <= $#contest; $i++) {
         print(N "$contest[$i]\n$altname[$i]\n$package[$i]\n")
         print(N "$contest[$i]\n$altname[$i]\n$package[$i]\n")
             || &quit(sprintf(_g("write diversions-new: %s"), $!));
             || &quit(sprintf(_g("write diversions-new: %s"), $!));
     }
     }
@@ -273,7 +288,11 @@ sub save {
 }
 }
 
 
 sub infoa { &infol($file,$divertto,$package); }
 sub infoa { &infol($file,$divertto,$package); }
-sub infon { &infol($contest[$i],$altname[$i],$package[$i]); }
+sub infon
+{
+    my $i = shift;
+    &infol($contest[$i], $altname[$i], $package[$i]);
+}
 
 
 sub quit
 sub quit
 {
 {

+ 1 - 2
scripts/dpkg-gettext.pl

@@ -1,9 +1,8 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-use strict;
-use warnings;
 # Copied from /usr/share/perl5/Debconf/Gettext.pm
 # Copied from /usr/share/perl5/Debconf/Gettext.pm
 
 
 use strict;
 use strict;
+use warnings;
 
 
 BEGIN {
 BEGIN {
 	eval 'use Locale::gettext';
 	eval 'use Locale::gettext';

+ 26 - 14
scripts/dpkg-statoverride.pl

@@ -1,10 +1,13 @@
 #! /usr/bin/perl
 #! /usr/bin/perl
 
 
+use strict;
+use warnings;
+
 use POSIX;
 use POSIX;
 use POSIX qw(:errno_h :signal_h);
 use POSIX qw(:errno_h :signal_h);
 
 
-$admindir= "/var/lib/dpkg"; # This line modified by Makefile
-$version= '1.3.0'; # This line modified by Makefile
+my $admindir = "/var/lib/dpkg"; # This line modified by Makefile
+my $version = '1.3.0'; # This line modified by Makefile
 
 
 ($0) = $0 =~ m:.*/(.+):;
 ($0) = $0 =~ m:.*/(.+):;
 
 
@@ -13,10 +16,14 @@ push (@INC, $dpkglibdir);
 require 'dpkg-gettext.pl';
 require 'dpkg-gettext.pl';
 textdomain("dpkg");
 textdomain("dpkg");
 
 
-$verbose= 1;
-$doforce= 0;
-$doupdate= 0;
-$mode= "";
+my $verbose = 1;
+my $doforce = 0;
+my $doupdate = 0;
+my $mode = "";
+
+my %owner;
+my %group;
+my %mode;
 
 
 sub version {
 sub version {
 	printf _g("Debian %s version %s.\n"), $0, $version;
 	printf _g("Debian %s version %s.\n"), $0, $version;
@@ -87,8 +94,8 @@ while (@ARGV) {
 	}
 	}
 }
 }
 
 
-$dowrite=0;
-$exitcode=0;
+my $dowrite = 0;
+my $exitcode = 0;
 
 
 &badusage(_g("no mode specified")) unless $mode;
 &badusage(_g("no mode specified")) unless $mode;
 &ReadOverrides;
 &ReadOverrides;
@@ -96,25 +103,30 @@ $exitcode=0;
 if ($mode eq "add") {
 if ($mode eq "add") {
 	@ARGV==4 || &badusage(_g("--add needs four arguments"));
 	@ARGV==4 || &badusage(_g("--add needs four arguments"));
 
 
-	$user=$ARGV[0];
+	my $user = $ARGV[0];
+	my $uid = 0;
+	my $gid = 0;
+
 	if ($user =~ m/^#([0-9]+)$/) {
 	if ($user =~ m/^#([0-9]+)$/) {
 	    $uid=$1;
 	    $uid=$1;
 	    &badusage(sprintf(_g("illegal user %s"), $user)) if ($uid<0);
 	    &badusage(sprintf(_g("illegal user %s"), $user)) if ($uid<0);
 	} else {
 	} else {
+	    my ($name, $pw);
 	    (($name,$pw,$uid)=getpwnam($user)) || &badusage(sprintf(_g("non-existing user %s"), $user));
 	    (($name,$pw,$uid)=getpwnam($user)) || &badusage(sprintf(_g("non-existing user %s"), $user));
 	}
 	}
 
 
-	$group=$ARGV[1];
+	my $group = $ARGV[1];
 	if ($group =~ m/^#([0-9]+)$/) {
 	if ($group =~ m/^#([0-9]+)$/) {
 	    $gid=$1;
 	    $gid=$1;
 	    &badusage(sprintf(_g("illegal group %s"), $group)) if ($gid<0);
 	    &badusage(sprintf(_g("illegal group %s"), $group)) if ($gid<0);
 	} else {
 	} else {
+	    my ($name, $pw);
 	    (($name,$pw,$gid)=getgrnam($group)) || &badusage(sprintf(_g("non-existing group %s"), $group));
 	    (($name,$pw,$gid)=getgrnam($group)) || &badusage(sprintf(_g("non-existing group %s"), $group));
 	}
 	}
 
 
-	$mode= $ARGV[2];
+	my $mode = $ARGV[2];
 	(($mode<0) or (oct($mode)>07777) or ($mode !~ m/\d+/)) && &badusage(sprintf(_g("illegal mode %s"), $mode));
 	(($mode<0) or (oct($mode)>07777) or ($mode !~ m/\d+/)) && &badusage(sprintf(_g("illegal mode %s"), $mode));
-	$file= $ARGV[3];
+	my $file = $ARGV[3];
 	$file =~ m/\n/ && &badusage(_g("file may not contain newlines"));
 	$file =~ m/\n/ && &badusage(_g("file may not contain newlines"));
 	$file =~ s,/+$,, && print STDERR _g("stripping trailing /")."\n";
 	$file =~ s,/+$,, && print STDERR _g("stripping trailing /")."\n";
 
 
@@ -142,7 +154,7 @@ if ($mode eq "add") {
 	}
 	}
 } elsif ($mode eq "remove") {
 } elsif ($mode eq "remove") {
 	@ARGV==1 || &badusage(sprintf(_g("--%s needs a single argument"), "remove"));
 	@ARGV==1 || &badusage(sprintf(_g("--%s needs a single argument"), "remove"));
-	$file=$ARGV[0];
+	my $file = $ARGV[0];
 	$file =~ s,/+$,, && print STDERR _g("stripping trailing /")."\n";
 	$file =~ s,/+$,, && print STDERR _g("stripping trailing /")."\n";
 	if (not defined $owner{$file}) {
 	if (not defined $owner{$file}) {
 		print STDERR _g("No override present.")."\n";
 		print STDERR _g("No override present.")."\n";
@@ -165,7 +177,7 @@ if ($mode eq "add") {
 		s,/+$,, && print STDERR _g("stripping trailing /")."\n";
 		s,/+$,, && print STDERR _g("stripping trailing /")."\n";
 		push(@list,"^$_\$");
 		push(@list,"^$_\$");
 	}
 	}
-	$pat= join('|',@list);
+	my $pat = join('|', @list);
 	$exitcode=1;
 	$exitcode=1;
 	for $file (keys %owner) {
 	for $file (keys %owner) {
 		next unless ($file =~ m/$pat/o);
 		next unless ($file =~ m/$pat/o);

+ 86 - 60
scripts/update-alternatives.pl

@@ -1,8 +1,11 @@
 #!/usr/bin/perl --
 #!/usr/bin/perl --
 
 
-$admindir= "/var/lib/dpkg"; # This line modified by Makefile
-$dpkglibdir= "../utils"; # This line modified by Makefile
-$version= '0.93.80'; # This line modified by Makefile
+use strict;
+use warnings;
+
+my $admindir = "/var/lib/dpkg"; # This line modified by Makefile
+my $dpkglibdir = "../utils"; # This line modified by Makefile
+my $version = '0.93.80'; # This line modified by Makefile
 push (@INC, $dpkglibdir);
 push (@INC, $dpkglibdir);
 require 'dpkg-gettext.pl';
 require 'dpkg-gettext.pl';
 textdomain("dpkg");
 textdomain("dpkg");
@@ -10,27 +13,44 @@ textdomain("dpkg");
 ($0) = $0 =~ m:.*/(.+):;
 ($0) = $0 =~ m:.*/(.+):;
 
 
 # Global variables:
 # Global variables:
-#  $alink            Alternative we are managing (ie the symlink we're making/removing) (install only)
-#  $name             Name of the alternative (the symlink) we are processing
-#  $apath            Path of alternative we are offering            
-#  $apriority        Priority of link (only when we are installing an alternative)
-#  $mode             action to perform (display / install / remove / display / auto / config)
-#  $manual           update-mode for alternative (manual / auto)
-#  $state            State of alternative:
-#                       expected: alternative with highest priority is the active alternative
-#                       expected-inprogress: busy selecting alternative with highest priority
-#                       unexpected: alternative another alternative is active / error during readlink
-#                       nonexistent: alternative-symlink does not exist
-#  $link             Link we are working with
-#  @slavenames       List with names of slavelinks
-#  %slavenum         Map from name of slavelink to slave-index (into @slavelinks)
-#  @slavelinks       List of slavelinks (indexed by slave-index)
-#  %versionnum       Map from currently available versions into @versions and @priorities
-#  @versions         List of available versions for alternative
-#  %priorities       Map from @version-index to priority
-#  %slavepath        Map from (@version-index,slavename) to slave-path
-
-$enoent=`$dpkglibdir/enoent` || die sprintf(_g("Cannot get ENOENT value from %s: %s"), "$dpkglibdir/enoent", $!);
+my $mode = '';        # Action to perform (display / install / remove / display / auto / config)
+my $manual = 'auto';  # Update mode for alternative (manual / auto)
+my $state;            # State of alternative:
+                      #   expected: alternative with highest priority is the active alternative
+                      #   expected-inprogress: busy selecting alternative with highest priority
+                      #   unexpected: alternative another alternative is active / error during readlink
+                      #   nonexistent: alternative-symlink does not exist
+my $dataread;
+
+my %versionnum;       # Map from currently available versions into @versions and @priorities
+my @versions;         # List of available versions for alternative
+my @priorities;       # Map from @version-index to priority
+
+my $best;
+my $bestpri;
+my $bestnum;
+
+my $link;             # Link we are working with
+my $linkname;
+
+my $alink;            # Alternative we are managing (ie the symlink we're making/removing) (install only)
+my $name;             # Name of the alternative (the symlink) we are processing
+my $apath;            # Path of alternative we are offering
+my $apriority;        # Priority of link (only when we are installing an alternative)
+my %aslavelink;
+my %aslavepath;
+my %aslavelinkcount;
+
+my $slink;
+my $sname;
+my $spath;
+my @slavenames;       # List with names of slavelinks
+my %slavenum;         # Map from name of slavelink to slave-index (into @slavelinks)
+my @slavelinks;       # List of slavelinks (indexed by slave-index)
+my %slavepath;        # Map from (@version-index,slavename) to slave-path
+my %slavelinkcount;
+
+my $enoent = `$dpkglibdir/enoent` || die sprintf(_g("Cannot get ENOENT value from %s: %s"), "$dpkglibdir/enoent", $!);
 sub ENOENT { $enoent; }
 sub ENOENT { $enoent; }
 
 
 sub version {
 sub version {
@@ -97,12 +117,11 @@ sub badusage
     exit(2);
     exit(2);
 }
 }
 
 
-$altdir= '/etc/alternatives';
-$admindir= $admindir . '/alternatives';
-$testmode= 0;
-$verbosemode= 0;
-$mode='';
-$manual= 'auto';
+my $altdir = '/etc/alternatives';
+# FIXME: this should not override the previous assignment.
+$admindir = $admindir . '/alternatives';
+my $testmode = 0;
+my $verbosemode = 0;
 $|=1;
 $|=1;
 
 
 sub checkmanymodes {
 sub checkmanymodes {
@@ -188,11 +207,12 @@ if (open(AF,"$admindir/$name")) {
         defined($versionnum{$version}) && &badfmt(sprintf(_g("duplicate path %s"), $version));
         defined($versionnum{$version}) && &badfmt(sprintf(_g("duplicate path %s"), $version));
        if ( -r $version ) {
        if ( -r $version ) {
            push(@versions,$version);
            push(@versions,$version);
+           my $i;
            $versionnum{$version}= $i= $#versions;
            $versionnum{$version}= $i= $#versions;
-           $priority= &gl("priority");
+           my $priority = &gl("priority");
            $priority =~ m/^[-+]?\d+$/ || &badfmt(sprintf(_g("priority %s %s"), $version, $priority));
            $priority =~ m/^[-+]?\d+$/ || &badfmt(sprintf(_g("priority %s %s"), $version, $priority));
            $priorities[$i]= $priority;
            $priorities[$i]= $priority;
-           for ($j=0; $j<=$#slavenames; $j++) {
+           for (my $j = 0; $j <= $#slavenames; $j++) {
                $slavepath{$i,$j}= &gl("spath");
                $slavepath{$i,$j}= &gl("spath");
            }
            }
        } else {
        } else {
@@ -200,7 +220,7 @@ if (open(AF,"$admindir/$name")) {
            &pr(sprintf(_g("Alternative for %s points to %s - which wasn't found.  Removing from list of alternatives."), $name, $version))
            &pr(sprintf(_g("Alternative for %s points to %s - which wasn't found.  Removing from list of alternatives."), $name, $version))
              if $verbosemode > 0;
              if $verbosemode > 0;
            &gl("priority");
            &gl("priority");
-           for ($j=0; $j<=$#slavenames; $j++) {
+           for (my $j = 0; $j <= $#slavenames; $j++) {
                &gl("spath");
                &gl("spath");
            }
            }
        }
        }
@@ -225,13 +245,14 @@ if ($mode eq 'display') {
             &pr(sprintf(_g(" link unreadable - %s"), $!));
             &pr(sprintf(_g(" link unreadable - %s"), $!));
         }
         }
         $best= '';
         $best= '';
-        for ($i=0; $i<=$#versions; $i++) {
+        for (my $i = 0; $i <= $#versions; $i++) {
             if ($best eq '' || $priorities[$i] > $bestpri) {
             if ($best eq '' || $priorities[$i] > $bestpri) {
                 $best= $versions[$i]; $bestpri= $priorities[$i];
                 $best= $versions[$i]; $bestpri= $priorities[$i];
             }
             }
             &pr(sprintf(_g("%s - priority %s"), $versions[$i], $priorities[$i]));
             &pr(sprintf(_g("%s - priority %s"), $versions[$i], $priorities[$i]));
-            for ($j=0; $j<=$#slavenames; $j++) {
-                next unless length($tspath= $slavepath{$i,$j});
+            for (my $j = 0; $j <= $#slavenames; $j++) {
+                my $tspath = $slavepath{$i, $j};
+                next unless length($tspath);
                 &pr(sprintf(_g(" slave %s: %s"), $slavenames[$j], $tspath));
                 &pr(sprintf(_g(" slave %s: %s"), $slavenames[$j], $tspath));
             }
             }
         }
         }
@@ -246,7 +267,7 @@ if ($mode eq 'display') {
 
 
 if ($mode eq 'list') {
 if ($mode eq 'list') {
     if ($dataread) {
     if ($dataread) {
-	for ($i = 0; $i<=$#versions; $i++) {
+	for (my $i = 0; $i <= $#versions; $i++) {
 	    &pr("$versions[$i]");
 	    &pr("$versions[$i]");
 	}
 	}
     }
     }
@@ -254,7 +275,7 @@ if ($mode eq 'list') {
 }
 }
 
 
 $best= '';
 $best= '';
-for ($i=0; $i<=$#versions; $i++) {
+for (my $i = 0; $i <= $#versions; $i++) {
     if ($best eq '' || $priorities[$i] > $bestpri) {
     if ($best eq '' || $priorities[$i] > $bestpri) {
         $best= $versions[$i]; $bestpri= $priorities[$i];
         $best= $versions[$i]; $bestpri= $priorities[$i];
     }
     }
@@ -337,18 +358,20 @@ if ($mode eq 'install') {
             &quit(sprintf(_g("unable to rename %s to %s: %s"), $link, $alink, $!));
             &quit(sprintf(_g("unable to rename %s to %s: %s"), $link, $alink, $!));
     }
     }
     $link= $alink;
     $link= $alink;
+    my $i;
     if (!defined($i= $versionnum{$apath})) {
     if (!defined($i= $versionnum{$apath})) {
         push(@versions,$apath);
         push(@versions,$apath);
         $versionnum{$apath}= $i= $#versions;
         $versionnum{$apath}= $i= $#versions;
     }
     }
     $priorities[$i]= $apriority;
     $priorities[$i]= $apriority;
     for $sname (keys %aslavelink) {
     for $sname (keys %aslavelink) {
+        my $j;
         if (!defined($j= $slavenum{$sname})) {
         if (!defined($j= $slavenum{$sname})) {
             push(@slavenames,$sname);
             push(@slavenames,$sname);
             $slavenum{$sname}= $j= $#slavenames;
             $slavenum{$sname}= $j= $#slavenames;
         }
         }
-        $oldslavelink= $slavelinks[$j];
-        $newslavelink= $aslavelink{$sname};
+        my $oldslavelink = $slavelinks[$j];
+        my $newslavelink = $aslavelink{$sname};
         $slavelinkcount{$oldslavelink}-- if $oldslavelink ne '';
         $slavelinkcount{$oldslavelink}-- if $oldslavelink ne '';
         $slavelinkcount{$newslavelink}++ &&
         $slavelinkcount{$newslavelink}++ &&
             &quit(sprintf(_g("slave link name %s duplicated"), $newslavelink));
             &quit(sprintf(_g("slave link name %s duplicated"), $newslavelink));
@@ -360,23 +383,24 @@ if ($mode eq 'install') {
         }
         }
         $slavelinks[$j]= $newslavelink;
         $slavelinks[$j]= $newslavelink;
     }
     }
-    for ($j=0; $j<=$#slavenames; $j++) {
+    for (my $j = 0; $j <= $#slavenames; $j++) {
         $slavepath{$i,$j}= $aslavepath{$slavenames[$j]};
         $slavepath{$i,$j}= $aslavepath{$slavenames[$j]};
     }
     }
 }
 }
 
 
 if ($mode eq 'remove') {
 if ($mode eq 'remove') {
+    my $hits = 0;
     if ($manual eq "manual" and $state ne "expected" and (map { $hits += $apath eq $_ } @versions) and $hits and $linkname eq $apath) {
     if ($manual eq "manual" and $state ne "expected" and (map { $hits += $apath eq $_ } @versions) and $hits and $linkname eq $apath) {
 	&pr(_g("Removing manually selected alternative - switching to auto mode"));
 	&pr(_g("Removing manually selected alternative - switching to auto mode"));
 	$manual= "auto";
 	$manual= "auto";
     }
     }
-    if (defined($i= $versionnum{$apath})) {
-        $k= $#versions;
+    if (defined(my $i = $versionnum{$apath})) {
+        my $k = $#versions;
         $versionnum{$versions[$k]}= $i;
         $versionnum{$versions[$k]}= $i;
         delete $versionnum{$versions[$i]};
         delete $versionnum{$versions[$i]};
         $versions[$i]= $versions[$k]; $#versions--;
         $versions[$i]= $versions[$k]; $#versions--;
         $priorities[$i]= $priorities[$k]; $#priorities--;
         $priorities[$i]= $priorities[$k]; $#priorities--;
-        for ($j=0; $j<=$#slavenames; $j++) {
+        for (my $j = 0; $j <= $#slavenames; $j++) {
             $slavepath{$i,$j}= $slavepath{$k,$j};
             $slavepath{$i,$j}= $slavepath{$k,$j};
             delete $slavepath{$k,$j};
             delete $slavepath{$k,$j};
         }
         }
@@ -388,12 +412,12 @@ if ($mode eq 'remove') {
 
 
 if ($mode eq 'remove-all') {
 if ($mode eq 'remove-all') {
    $manual= "auto";
    $manual= "auto";
-   $k= $#versions;
-   for ($i=0; $i<=$#versions; $i++) {
+   my $k = $#versions;
+   for (my $i = 0; $i <= $#versions; $i++) {
         $k--;
         $k--;
         delete $versionnum{$versions[$i]};
         delete $versionnum{$versions[$i]};
 	$#priorities--;
 	$#priorities--;
-        for ($j=0; $j<=$#slavenames; $j++) {
+        for (my $j = 0; $j <= $#slavenames; $j++) {
             $slavepath{$i,$j}= $slavepath{$k,$j};
             $slavepath{$i,$j}= $slavepath{$k,$j};
             delete $slavepath{$k,$j};
             delete $slavepath{$k,$j};
         }
         }
@@ -402,8 +426,9 @@ if ($mode eq 'remove-all') {
  }
  }
 
 
 
 
-for ($j=0; $j<=$#slavenames; $j++) {
-    for ($i=0; $i<=$#versions; $i++) {
+for (my $j = 0; $j <= $#slavenames; $j++) {
+    my $i;
+    for ($i = 0; $i <= $#versions; $i++) {
         last if $slavepath{$i,$j} ne '';
         last if $slavepath{$i,$j} ne '';
     }
     }
     if ($i > $#versions) {
     if ($i > $#versions) {
@@ -413,13 +438,13 @@ for ($j=0; $j<=$#slavenames; $j++) {
             &quit(sprintf(_g("unable to remove %s: %s"), "$altdir/$slavenames[$j]", $!));
             &quit(sprintf(_g("unable to remove %s: %s"), "$altdir/$slavenames[$j]", $!));
         unlink($slavelinks[$j]) || $! == &ENOENT ||
         unlink($slavelinks[$j]) || $! == &ENOENT ||
             &quit(sprintf(_g("unable to remove %s: %s"), $slavelinks[$j], $!));
             &quit(sprintf(_g("unable to remove %s: %s"), $slavelinks[$j], $!));
-        $k= $#slavenames;
+        my $k = $#slavenames;
         $slavenum{$slavenames[$k]}= $j;
         $slavenum{$slavenames[$k]}= $j;
         delete $slavenum{$slavenames[$j]};
         delete $slavenum{$slavenames[$j]};
         $slavelinkcount{$slavelinks[$j]}--;
         $slavelinkcount{$slavelinks[$j]}--;
         $slavenames[$j]= $slavenames[$k]; $#slavenames--;
         $slavenames[$j]= $slavenames[$k]; $#slavenames--;
         $slavelinks[$j]= $slavelinks[$k]; $#slavelinks--;
         $slavelinks[$j]= $slavelinks[$k]; $#slavelinks--;
-        for ($i=0; $i<=$#versions; $i++) {
+        for (my $i = 0; $i <= $#versions; $i++) {
             $slavepath{$i,$j}= $slavepath{$i,$k};
             $slavepath{$i,$j}= $slavepath{$i,$k};
             delete $slavepath{$i,$k};
             delete $slavepath{$i,$k};
         }
         }
@@ -452,19 +477,19 @@ open(AF,">$admindir/$name.dpkg-new") ||
     &quit(sprintf(_g("unable to open %s for write: %s"), "$admindir/$name.dpkg-new", $!));
     &quit(sprintf(_g("unable to open %s for write: %s"), "$admindir/$name.dpkg-new", $!));
 &paf($manual);
 &paf($manual);
 &paf($link);
 &paf($link);
-for ($j=0; $j<=$#slavenames; $j++) {
+for (my $j = 0; $j <= $#slavenames; $j++) {
     &paf($slavenames[$j]);
     &paf($slavenames[$j]);
     &paf($slavelinks[$j]);
     &paf($slavelinks[$j]);
 }
 }
 &paf('');
 &paf('');
 $best= '';
 $best= '';
-for ($i=0; $i<=$#versions; $i++) {
+for (my $i = 0; $i <= $#versions; $i++) {
     if ($best eq '' || $priorities[$i] > $bestpri) {
     if ($best eq '' || $priorities[$i] > $bestpri) {
         $best= $versions[$i]; $bestpri= $priorities[$i]; $bestnum= $i;
         $best= $versions[$i]; $bestpri= $priorities[$i]; $bestnum= $i;
     }
     }
     &paf($versions[$i]);
     &paf($versions[$i]);
     &paf($priorities[$i]);
     &paf($priorities[$i]);
-    for ($j=0; $j<=$#slavenames; $j++) {
+    for (my $j = 0; $j <= $#slavenames; $j++) {
         &paf($slavepath{$i,$j});
         &paf($slavepath{$i,$j});
     }
     }
 }
 }
@@ -516,7 +541,7 @@ rename_mv("$admindir/$name.dpkg-new","$admindir/$name") ||
 if ($manual eq 'auto') {
 if ($manual eq 'auto') {
     rename_mv("$altdir/$name.dpkg-tmp","$altdir/$name") ||
     rename_mv("$altdir/$name.dpkg-tmp","$altdir/$name") ||
         &quit(sprintf(_g("unable to install %s as %s: %s"), "$altdir/$name.dpkg-tmp", "$altdir/$name", $!));
         &quit(sprintf(_g("unable to install %s as %s: %s"), "$altdir/$name.dpkg-tmp", "$altdir/$name", $!));
-    for ($j=0; $j<=$#slavenames; $j++) {
+    for (my $j = 0; $j <= $#slavenames; $j++) {
         $sname= $slavenames[$j];
         $sname= $slavenames[$j];
         $slink= $slavelinks[$j];
         $slink= $slavelinks[$j];
         if (!defined($linkname= readlink($slink)) && $! != &ENOENT) {
         if (!defined($linkname= readlink($slink)) && $! != &ENOENT) {
@@ -569,7 +594,7 @@ sub config_message {
                      "  Selection    Alternative\n".
                      "  Selection    Alternative\n".
                      "-----------------------------------------------\n"),
                      "-----------------------------------------------\n"),
                   $#versions+1, $name);
                   $#versions+1, $name);
-    for ($i=0; $i<=$#versions; $i++) {
+    for (my $i = 0; $i <= $#versions; $i++) {
 	printf(STDOUT "%s%s %8s    %s\n",
 	printf(STDOUT "%s%s %8s    %s\n",
 	    (readlink("$altdir/$name") eq $versions[$i]) ? '*' : ' ',
 	    (readlink("$altdir/$name") eq $versions[$i]) ? '*' : ' ',
 	    ($best eq $versions[$i]) ? '+' : ' ',
 	    ($best eq $versions[$i]) ? '+' : ' ',
@@ -579,6 +604,7 @@ sub config_message {
 }
 }
 
 
 sub config_alternatives {
 sub config_alternatives {
+    my $preferred;
     do {
     do {
 	&config_message;
 	&config_message;
 	if ($#versions == 0) { return; }
 	if ($#versions == 0) { return; }
@@ -616,8 +642,8 @@ sub config_alternatives {
 sub set_alternatives {
 sub set_alternatives {
    $manual = "manual";
    $manual = "manual";
    # Get prefered number
    # Get prefered number
-   $preferred = -1;
-   for ($i=0; $i<=$#versions; $i++) {
+   my $preferred = -1;
+   for (my $i = 0; $i <= $#versions; $i++) {
      if($versions[$i] eq $apath) {
      if($versions[$i] eq $apath) {
        $preferred = $i;
        $preferred = $i;
        last;
        last;
@@ -632,8 +658,8 @@ sub set_alternatives {
    rename_mv("$altdir/$name.dpkg-tmp","$altdir/$name") ||
    rename_mv("$altdir/$name.dpkg-tmp","$altdir/$name") ||
      &quit(sprintf(_g("unable to install %s as %s: %s"), "$altdir/$name.dpkg-tmp", "$altdir/$name", $!));
      &quit(sprintf(_g("unable to install %s as %s: %s"), "$altdir/$name.dpkg-tmp", "$altdir/$name", $!));
    # Link slaves...
    # Link slaves...
-   for( $slnum = 0; $slnum < @slavenames; $slnum++ ) {
-     $slave = $slavenames[$slnum];
+   for (my $slnum = 0; $slnum < @slavenames; $slnum++ ) {
+     my $slave = $slavenames[$slnum];
      if ($slavepath{$preferred,$slnum} ne '') {
      if ($slavepath{$preferred,$slnum} ne '') {
        checked_symlink($slavepath{$preferred,$slnum},
        checked_symlink($slavepath{$preferred,$slnum},
 		       "$altdir/$slave.dpkg-tmp");
 		       "$altdir/$slave.dpkg-tmp");