#!/usr/bin/perl -w

use strict;

use IO::File;

my $apt_lists = IO::File->new("cat /var/lib/apt/lists/*_Packages |");
my $dpkg_status = IO::File->new("/var/lib/dpkg/status");

my $apt_lists_versions = read_deb_versions($apt_lists);
my $dpkg_status_versions = read_deb_versions($dpkg_status);

my ($package, $dpkg_status_version, $apt_lists_version);
for $package (sort keys %$dpkg_status_versions) {
	$dpkg_status_version = $$dpkg_status_versions{$package};
	$apt_lists_version = $$apt_lists_versions{$package};
	if ($apt_lists_version && $dpkg_status_version ne $apt_lists_version) {
		print "$package\t$dpkg_status_version\t$apt_lists_version\n";
	}
}

sub read_deb_versions {
	my ($file) = @_;
	my (%version, $package, $line);
	while ($line=<$file>) {
		if ($line =~ /^Package: (.*)$/) {
			$package = $1;
		} elsif ($line =~ /^Version: (.*)$/) {
			$version{$package} = $1;
		}
	}
	return \%version;
}
