public
Last active

Install all favorited distributions

  • Download Gist
cpan_favorites.pl
Perl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use Mojo::UserAgent;
 
my $url = shift @ARGV or die "Usage: $0 metacpan_author_url";
my $ua = Mojo::UserAgent->new;
 
my $dom = $ua->get($url)->res->dom;
my @modules = $dom->find('td.release a')->pluck('text')->each;
 
for my $module (@modules) {
$module =~ s/-/::/g;
qx/cpanm $module/;
}
gistfile1.sh
Shell
1 2 3 4 5
# and another solution proposed from Stephen Thirlwall (sdt) (see comment below)
 
cpan_favorites() {
perl -Mojo -E "g('https://metacpan.org/author/$1')->dom('td.release a')->pluck('text')->each(sub{s/-/::/g;say})"
}

DDP was added for debugging only and is not really needed

Oh nice - thanks for this!

I saw this post http://blogs.perl.org/users/steven_haryanto/2012/10/your-own-taskbelikeauthorfavorited.html and thought it might be better to just feed the favorites list into cpanm, rather than uploading something onto cpan.

Here's a one-line version you can stick in your .bashrc:

install_cpan_favorites() {
  perl -Mojo -E "s/-/::/g and qx(cpanm \$_) for g('https://metacpan.org/author/$1')->dom('td.release a')->pluck('text')->each";
}

usage: install_cpan_favorites $username

(somewhat inspired by this thread: https://groups.google.com/forum/?fromgroups=#!topic/mojolicious/iTVzzjX5pPQ)

I think I prefer this which just lists them out, and then feed that into xargs cpanm or whatever:

cpan_favorites() {
  perl -Mojo -E "g('https://metacpan.org/author/$1')->dom('td.release a')->pluck('text')->each(sub{s/-/::/g;say})"
}

That is really nice and I've already added it into my .bashrc :) I think also that the seconds version where you can pipe the output to cpanm is preferable. Thanks for the follow u and sharing it

Thanks @dolmen. Just saw the tweet and was checking it out ;)

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.