Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Install all favorited distributions
#!/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/;
}
# 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})"
}
@dpetrov
Owner

DDP was added for debugging only and is not really needed

@sdt
sdt commented

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)

@sdt
sdt commented

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})"
}
@dpetrov
Owner

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

@dpetrov
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.