clairvyの日記

思ったこと,調べたことを書きます

Carton でモジュールをインストールしようとした話

まだ書きかけでした.

モジュールをインストールしようとした

carton 環境を作った

やること

  • plenv のインストール = ~/.plenv 配下
    • Perl のインストール = ~/.plenv/versions 配下
    • cpanm のインストール = ~/.plenv/versions/<インストールしたバージョン> 配下
      • perl-Carton のインストール = ~/.plenv/versions/<インストールしたバージョン> 配下
        • perl-Carton でモジュールをインストール
        • perl-Carton 経由でモジュールを利用

動機

モジュールをインストールしたい. できるだけインストール先がわかりやすく, 指定も楽な方がよい.

最近のことがわからない.

  • Windows でも実施する
    • Strawberry Perl だと cpanm までは入っている
  • plenv を使おう
    • System でもいいけど,root じゃない人も居るし,環境を隔離したい(~/.plenv 削除すれば全部消えるとか)
    • rbenv を使ってたりするし.こっちでいいか.
    • install-cpanm サブコマンドがある.
      • 普通にインストールしてる
  • cpanm / perl-carton なんすかね?
    • cpanm 単体でやろうとしたけど,@INC の指定がよくわからなかった
    • perl-carton なら簡単なんすかね
      • carton exec でやるのもいい.
    • できるだけローカルディレクトリで済ませたかった.(インストール先が理解しやすいと良い)
    • Carmel - CPAN Artifact Repository Manager - metacpan.org の方がいいんすかね? まだ EXPERIMENTAL ですね.

install-cpanm 補足

$ tail -2 ~/.plenv/libexec/plenv-install-cpanm
curl ${PLENV_INSTALL_CPANM} -L http://cpanmin.us/ | plenv exec perl - ExtUtils::MakeMaker App::cpanminus
plenv rehash

インストール

plenv のインストールは簡単です

コピペだけしとくと

$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv
$ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/

.bashrc や .zshrc に以下を追加

export PATH="$HOME/.plenv/bin:$PATH"
eval "$(plenv init -)"

で,Perl をインストールして使えるようにする.と

$ source ~/.zshrc
$ plenv install -l|tail -1
 5.23.9
$ plenv install 5.23.9
$ plenv global 5.23.9
$ perl -V|head -1
Summary of my perl5 (revision 5 version 23 subversion 9) configuration:
cpanm を使う
$ plenv install-cpanm
$ where cpanm
<HOME>/.plenv/shims/cpanm
$ rehash
$ cpanm -V|head -1
cpanm (App::cpanminus) version 1.7040 (<HOME>/.plenv/versions/5.23.9/bin/cpanm)
perl-carton を使う
$ cpanm Carton
$ rehash
$ where carton 
<HOME>/.plenv/shims/carton
$ carton -v
carton v1.0.22
モジュールをインストールする
$ edit cpanfile
$ cat cpanfile
requires 'HTTP::Server::Simple'
$ carton  // インストールされる

動作確認

$ carton exec ./a.pl    // HTTP::Server::Simple を使ったもので. @INC 指定していない
$ cat a.pl
#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

{
package A;

use strict;
use warnings;
use utf8;

use base qw(HTTP::Server::Simple::CGI);

sub handle_request {
    my ($self, $cgi) = @_;

    my $a = $cgi->param('a') || 'none';
    print "Hello World ", $a;
}

1;
}

my $server = A->new();
$server->run();

LINK

初めてのPerl 第6版

初めてのPerl 第6版

続・初めてのPerl 改訂第2版

続・初めてのPerl 改訂第2版

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)