gs /

#!/usr/bin/env perl
# name:, get orphan packages in gentoo
# author:    Xu Xiaodong <>
# 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;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.