my %rpms; my %files; foreach my $file (<*.rpm>) { # RPM-SPECIFIC STUFF: my @result = `rpm -qp --queryformat "%{NAME}/%{ARCH}/%{VERSION}.%{RELEASE}\n" $file`; my ($name, $arch, $version) = split /\//, $result[0]; # END RPM-SPECIFIC STUFF $name .= ":" . $arch; if ( exists $rpms{$name} ) { #decide which one we like better: my @a = split /\./, $version; my @b = split /\./, $rpms{$name}; my $i=0; my $max = $#a > $#b ? $#a : $#b; while ($i <= $max) { if ( $a[$i] eq $b[$i] ) { $i++; next; } if ( $a[$i] lt $b[$i] ) { print "rm -f $file\n"; last; } else { my $rm = "rm -f $files{$name}"; print "$rm\n"; `$rm` if lc($ARGV[0]) eq 'rm'; # or whatever else you want to do with old files. last; } $i++; } } else { $rpms{$name} = $version; $files{$name} = $file; } }