четверг, октября 22, 2015

Perl. Получить ссылку на скачивание дистрибутива по имени модуля.

На работе запонадобилось накачать модулей используя их канонические имена вида 'Foo::Bar'. Лазить на cpan и вручную качать, понятное дело, неправильно. К тому же, часть модулей содержалась в дистрибутиве других модулей, как например, Catalyst находится в составе Catalyst::Runtime.
Конечной моей задачей был скрипт, которому я на вход даю имя модуля, а он мне на выходе отдаёт ссылку на скачивание данного модуля с cpan.
Недолгое гугление вывело меня на модуль MetaCPAN::Client, который позволяет работать с metacpan через API.
В итоге, для скачивания модуля имеем такой код:
#!/usr/bin/env perl

use 5.014;
use strict;
use warnings;

use MetaCPAN::Client;

my $module_name = $ARGV[0] or die "Can't get module name";

my $mclient = MetaCPAN::Client->new;
my $module  = $mclient->module( $module_name );

say $mclient->release( $module->distribution )->download_url;
Проверяем:
% perl load_module.pl List::Util
https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.42.tar.gz
Что и требовалось.

Комментариев нет: