Source

gs / not_dep_pkg.pl

Full commit
#!/usr/bin/env perl
#
# name:      not_dep_pkg.pl, get orphan packages in gentoo
# author:    Xu Xiaodong <xxdlhy@gmail.com>
# license:   GPL
# created:   2011 Apr 10
# modified:  2011 Oct 28
#

use strict;
use warnings;

use List::Util qw(max);
use autodie;

my @pkgs = get_pkg();
my %info = get_info( \@pkgs );
my $len  = get_len( \@pkgs );

printf "%-${len}s: %s\n", $_, $info{$_} for sort keys %info;
printf "%-${len}s: %d packages\n", "Total", scalar @pkgs;

sub get_pkg {
    my @pkgs;

    local $/ = "\n\n";
    open my $in_fh, '-|', 'emerge -av --depclean';
    while (<$in_fh>) {
        push @pkgs, $1 if m!/(.*?)-\d.*\s.*\s+\@selected\n\n!;
    }
    close $in_fh;

    return @pkgs;
}

sub get_info {
    my ($pkg_ref) = @_;
    my %info;

    for my $pkg (@$pkg_ref) {
        $info{$pkg} = $1 if qx(eix -csI $pkg) =~ /: (.*)\n/;
    }

    return %info;
}

sub get_len {
    my ($pkg_ref) = @_;

    return max map { length $_ } @$pkg_ref;
}