plenv - ユーザー環境にPerlをインストールする



  1. Perl




  2. モジュール



  3. here

plenvというツールを利用すると、ユーザー環境にPerlをインストールすることができます。システム標準のPerlを利用したくない場合や新しいバージョンのPerlを利用したい場合は便利です。またplenvを使うと複数のバージョンのPerlの切り替えを行うことができます。

plenvのインストール

plenvをインストールしてみましょう。前提として、plenvをインストールするにはgitがインストールされている必要があるので注意してください。

以下のコマンドを実行します。

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

次にplenvのパスを通しましょう。plenvで用意されているbash用の設定ファイルを「.bash_profile」に追加します(bashの場合)。

以下のコマンドを実行してください。

echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(plenv init -)"' >> ~/.bash_profile
exec $SHELL -l

ユーザー環境へのPerlのインストール

利用できるPerlの一覧を見てみましょう。

plenv install -l

うまくplenvがインストールされていると、インストール可能なPerlの一覧が表示されます。

Available versions:
 5.29.1
 5.29.0
 5.28.0
 5.28.0-RC4
 5.28.0-RC3
 5.28.0-RC2
 5.28.0-RC1
 ...

ここで、599 Internal Exceptionなどエラーがでた場合は、以下の記事を元に、フィックスをこころみましょう。

どうしてもうまくいかない場合はperlbrewで。

ユーザー環境にPerlをインストールします。5.20.3のPerlをインストールしてみましょう。時間がかかるので待ちます(約40分程度)。

plenv install 5.20.3

利用可能なPerlの一覧を表示してみましょう。

plenv versions

Perlが利用できると

以下のように利用できるPerlが表示されます。アスタリスクのあるものが現在利用しているPerlです。

* system (set by /home/kimoto2/.plenv/version)
  5.20.3

Perlを切り替えるにはplenvのglobalコマンドを使用します。

plenv global 5.20.3

plenvの利点としてlocalコマンドを使うと、ディレクトリ毎にPerlを切り替えることもできるようです。

Perlのバージョンを実際に確認してみましょう。

perl -v

以下のように5.20.3のバージョンになっています。

This is perl 5, version 20, subversion 3 (v5.20.3) built for x86_64-linux
(with 1 registered patch, see perl -V for more detail)

cpanmのインストール

モジュールをインストールするのに便利なcpanmもインストールしておきましょう。

plenv install-cpanm

これで以下のコマンドでモジュールがインストールできるようになります。

cpanm JSON

元のPerlに戻す

元のPerlに戻すには以下のようにします。

plenv global system

plenvでインストールしたPerlをcrontabで使う方法

plenvのはまりどころのひとつは、plenvでインストールしたPerlがcronからは利用されないということでしょう。これはcronから実行するときは、シェルが起動されないので.bash_profileが読み込まれないことが原因です。plenvによる設定は、.bash_profileの中に記述したからですね。

一番簡単な解決策は、crontabの中でPATHを、そのユーザーが持っている環境変数PATHの値に書き換えてあげることです。

まずplenvをインストールしたユーザーで、PATH環境変数の値を表示します。

env | grep PATH

PATHを含んだ環境変数がいくつか表示されるので、PATHというものを探します。(ユーザー名がadminsの場合の例です。)

PATH=/home/kimoto2/.plenv/shims:/home/kimoto2/.plenv/bin:/home/kimoto2/.plenv/shims:/home/kimoto2/.plenv/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/kimoto2/.local/bin:/home/kimoto2/bin:/home/kimoto2/.local/bin:/home/kimoto2/bin:/home/kimoto2/.local/bin:/home/kimoto2/bin

以下のコマンドでcrontabを編集します。

crontab -e

そして上記のPATHの値をcrontabの一番上に書き込みます。

PATH=/home/kimoto2/.plenv/shims:/home/kimoto2/.plenv/bin:/home/kimoto2/.plenv/shims:/home/kimoto2/.plenv/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/kimoto2/.local/bin:/home/kimoto2/bin:/home/kimoto2/.local/bin:/home/kimoto2/bin:/home/kimoto2/.local/bin:/home/kimoto2/bin

# cronの設定が続く...

これでcronが指定したバージョンのPerlを利用してくれるようになります。

Perlスクリプトの一行目の記述

Perlスクリプトの一行目の記述は以下のようenvコマンドを使った記述をしましょう。

#!/usr/bin/env perl

こうすると設定したPATHの値から自動的にperlを検出してくれます。

この方法は、見てのとおり、crontabの移植性がまったくないです。ユーザー名のkimoto2が直接埋め込まれています。

でもこの方法が一番よいと思います。その理由はcrontab内では、環境変数の変数展開ができないという制限があるので、うまく移植性を持たせることが難しいということが理由です。移植性を持たせると、記述量が多くなったり、追加のスクリプトが必要になったり、管理が煩雑になってしまいます。

それとどんなにがんばっても、crontabって環境ごとに、何らかの差分があることがほとんどなので、移植性を保たせてもあんまりメリットがないということもあります。

macOSへのPerlのインストール



  1. Perl



  2. インストール

macOSの環境には、すでにPerlがインストールされています。

以下のコマンドでPerlがインストールされているか確認してみましょう。

perl -v

バージョン情報が表示されれば、OKです。

さっそく、Perlを使い始めてみましょう。

ユーザー環境へのPerlのインストール

最新のPerlなどを使いたい場合は、ユーザー環境にPerlをインストールすることもできます。

自分のユーザー環境にPerlをインストールしたい場合はperlbrewあるいはplenvというツールを使うことができます。

ルート権限が必要ないので、インストールが簡単で、OSの環境を汚しません。最新のPerlをインストールして使うことができます。

本番環境のWebサービスPerlを実行する場合は、この方法が2018年現在は主流となっています。

perlbrewとplenvはどちらも、似ているツールで、ユーザー環境にPerlをインストールするためのツールです。お好みで選択してください。

macOSでターミナルを立ち上げてから、以下の手順を実行してください。

Unix/LinuxへのPerlのインストール



  1. Perl



  2. インストール

Unix/Linux環境には、すでにPerlがインストールされてることが多いです。

以下のコマンドでPerlがインストールされているか確認してみましょう。

perl -v

存在する場合はすぐにPerlを使い始めることができます。

ない場合は、Unix/Linuxディストリビューションの標準のPerlをインストールすることができます。

あるいは、ユーザー環境にPerlをインストールすることもできます。

Unix/Linuxディストリビューションの標準のPerlをインストールする

rootユーザー権限で以下のコマンドを実行しましょう。ディストリビューションごとに、コマンドが異なるので、自分の環境にあったコマンドを実行してみてください。

# RedHatでのPerlのインストール
yum install perl

# Cent OSでのPerlのインストール
yum install perl

# DebianでのPerlのインストール
apt-get install perl

# UbuntuでのPerlのインストール
apt-get install perl

# FreeBSDでのPerlのインストール
pkg_add -r perl
ユーザー環境へのPerlのインストール

自分のユーザー環境にPerlをインストールしたい場合はperlbrewあるいはplenvというツールを使うことができます。

ルート権限が必要ないので、インストールは簡単で、OSの環境を汚しません。最新のPerlをインストールして使うことができます。

本番環境のWebサービスPerlを実行する場合は、この方法が2018年現在は主流となっています。

perlbrewとplenvはどちらも、似ているツールで、ユーザー環境にPerlをインストールするためのツールです。お好みで選択してください。

Strawberry PerlをWindowsにインストールする



  1. Perl



  2. インストール

Strawberry Perl(ストロベリーパール)はWindowsPerlを利用するために作成されたPerlディストリビューションのひとつです。

Strawberry Perl for Windows

Strawberry Perlの良いところは、

  • Unix/Linux環境のPerlと近い感覚で使うことができる
  • gccなどの開発環境が準備されていて、CPANモジュールがインストール可能
  • 古いバージョンのPerlも公開されている

です。

PerlUnix生まれの言語なので、WindowsでもなるべくUnix環境に近い感覚で利用できると使いやすく感じます。

Strawberry Perlを使うと、ほとんどのCPANモジュールがインストールが可能です。

古いバージョンのPerlもそのまま残してくれているので、開発をしていて、古いPerlがダウンロードできなくなったという心配もありません。

WindowsPerlを利用する場合は、一番最初に試してみてほしいPerlです。

以下では、Windows 10を想定して、インストール方法を解説します。Windowsの古いバージョンでも、手順はほとんど同じです。

Strawberry Perlのダウンロード

Strawberry Perlをダウンロードして、インストールしてみましょう。2018年の最新のPerlは、Perl 5.28です。

以下のリンクからStrawberry Perl 5.28 64bit MSI installerをクリックして、Strawberry Perlをデスクトップにダウンロードしましょう。

MSI installerというのはWindowsのデフォルトのインストーラーという意味です。

末尾のバージョン番号が少し違うこともあるかもしれませんが、気にしないで大丈夫です。

ほとんどの場合は64bit版のWindowsで大丈夫だと思いますが、32bit版が必要な方は、32bitの方のStrawberry Perlをダウンロードしてください。

Strawberry Perlのインストール

ダウンロードしたStrawberry Perlをダブルクリックします。

インストーラーが起動します。空き容量の計算に少し時間がかかる場合がありますが、そのまま待ちましょう。

インストーラーが起動しますので「Next」を押して進みます。

途中で「I accept the terms in the License Agreement」というチェックボックスがでてくるので、チェックをいれて「Next」を押します。

さらに「Next」を押して進んでいって、最後に「Install」をクリックするとStrawberry Perlのインストールが始まります。

ここで「この不明な発行元からのアプリがデバイスに変更を加えることを許可しますか?」というダイアログが表示されると思いますが、「はい」をクリックしましょう。

5分くらい時間がかかるので待ちましょう。

プログレスバーが満タンになると、Strawberry Perlのインストールが完了します。

「Finish」を押してダイアログを閉じましょう。Readmeが表示されますが、これも閉じて大丈夫です。

Perlがインストールされていることの確認

インストールが完了したら実際にStrawberry Perlがインストールできているか確認してみましょう。

コマンドプロンプトというツールをを実行してPerlのバージョンを表示してみます。

コマンドプロンプトは、「スタートメニュー」→「アプリの一覧」→「Windowsシステムツール」→「コマンドプロンプト」から実行できます。

黒い画面がでてくるので、以下の文字をキーボードからうち「Enter」を押してみてください。

perl -v

次のようにバージョン情報が表示されればインストールは成功しています。

This is perl 5, version 28, subversion 0 (v5.28.0) built for MSWin32-x64-multi-thread

これでStrawberry Perlのインストールは完了です。

WindowsPerlを実行するためにはコマンドプロンプトと呼ばれるものを利用します。perlコマンドを使ってPerlスクリプトを実行できるようになります。

コマンドプロンプトの使い方を知りたい方は「Perlを実行するためのコマンドプロンプト入門」という記事で解説しています。

FAQ

Strawberry Perlを正しく実行できません

Active PerlやStrawbery Perl 32bitなど別のPerlがインストールされていると、うまく動かない場合があります。別のPerlアプリのアンインストール画面からアンインストールして、もう一度Strawberry Perlをインストールしなおしてみてください。

その他のインストール方法

WindowsPerlを利用するその他の方法については、以下を参考にしてください。それぞれに長所があります。

msys2をWindowsにインストールしてPerlを使う



  1. Perl



  2. インストール

msys2をWindowsにインストールしてPerlを使う方法を解説します。

msys2(エムシスツー)は、Windows上でLinux風のシェル環境を提供するツールです。PerlUnix生まれですので、Unix/Linux風の環境で開発をしたいという要望があります。

msys2なら、ls、cat、tar、gitといったLinuxコマンドを利用することができますし、UTF-8も正しく表示できます。

POSIX互換レイヤーがありますので、Linuxでの起動を前提とした、Mojoliciousの開発サーバーも正しく動きます。

msys2のインストール 10分

msys2をダウンロードしてインストールしましょう。

msys2のダウンロード

msys2をインストールしましょう。64bit版Windowsの場合は64bit版のmsys2を、32bit版のWindowsの場合は32bit版のmsys2を利用しましょう。

現在(2018年)では、たいていのWindowsは64bit版かと思われますので、普通は64bit版で大丈夫なはず。以下の解説は64bit版を前提に行います。

一番上にあるのが、最新版です。クリックして、msys2をデスクトップに、ダウンロードしましょう。

msys2のインストール

デスクトップにあるmsys2のアイコンをダブルクリックします。

次へを押していくと、インストールが始まります。3分くらいかかりますので、待ちましょう。

完了を押すとmsys2が起動しますが、いったん右上のバツを押して終了させましょう。

msys2の二回目以降の起動

msys2を一度閉じると、次は、どこから起動したらいいんだろうと迷いますね。

Windowsのスタート−メニューのアプリケーションの一覧からmの目次を探すと「MSYS2 64bit」のディレクトリがあります。

その中に

がありますが、「MSYS2 MSYS」を起動しましょう。msys2には、3種類の起動スクリプトがありますが、Perlを正しく動かす場合は、Linuxの再現性が最も高い「MSYS2 MSYS」を選択します。

これを間違うと正しくPerlの環境が整えられないので、注意してください。

他の二つは、Windowsネイティブアプリを開発する場合に利用するようです。

デスクトップにショートカットを作成しておくと起動が便利です。その場合は「右クリック」「その他」「ファイルの場所を開く」から「MSYS2 MSYS」を「右クリック」「コピー」して、デスクトップで「貼り付け」です。

Perl環境構築 20分

msys2でPerlを利用できるようにします。PerlPerlで必要となる開発環境の一覧をまとめてインストールしましょう。

pacmanはmsys2のパッケージマネージャーです。

pacman -S perl perl-CPAN msys2-devel make libcrypt-devel

インストールするか聞かれるので「Enter」を押して進めましょう。何を聞かれても「Enter」で大丈夫。

以下がインストールされます。これが、Perlを正しく動かすために必要な最小限の環境です。

ここで一度右上のバツを押して、ターミナルを閉じて、「MSYS2 MSYS」再起動してください。これがないとPATHの設定が正しくされず、cpanコマンドが正しく動きません。

Perlがインストールされているか確認しましょう。

perl -v

以下のように表示されれば、インストールされています。

This is perl 5, version 28, subversion 0 (v5.28.0) built for x86_64-msys-thread-multi
Perlスクリプトを実行

msys2のユーザーディレクトリは以下の場所になっています。ユーザーディレクトリの下にPerlスクリプトを配置しましょう。

C:\msys64\home\ユーザー名

カレントディレクトリを移動。

cd C:\msys64\home\ユーザー名

ここに「test.pl」というファイルを作成。以下を記述しましょう。

print "Hello, World!\n";

Perlスクリプトを実行してみましょう。

perl test.pl

以下のように表示されれば、Perlはうまくインストールされて、プログラムが実行できています。

Hello, World!
CPANモジュールのインストール

Perlの環境が正しく構築されているかを確認するために、ピュアPerlで動くMojoliciousとXSで書かれているJSON::XSをインストールしてみましょう。

初回はcpanを自動設定するか聞かれるので「Enter」で進めましょう。

cpan Mojolicious
cpan JSON::XS

このインストールが確認できると作業は終了です。お疲れさまでした。

お願い

msys2は定期的にアップデートされて、パッケージ名やアップデートコマンドが変わったりするので、この手順でうまくいかない場合は、コメント欄かTwitterにてお知らせください。

雅なPerl入門 - 雅ちゃんが大学生クロウにPerlを学ぶ物語

雅(みやび)なPerl入門は、雅ちゃんが大学生クロウにPerlを学ぶ物語形式で、Perlを学べる入門書。

Perlを教えてくださいっ!」
ある日突然、twitterのダイレクトメッセージにメッセージが飛び込んできた。それは女の子からのものだった。どうせまたスパムだろう。最初はそう思っていたのでメッセージを無視し続けていたのだ。しかし、その後もメッセージは送られ続けてきた。


そんな俺がPerlを教えることになるとは。ただ、俺は面倒見は良い方だから、こういう話は断れない性格なのだ。決して女の子にPerlを教えたいがためではないのだ。
「ところで名前はなんていうの?」
「雅といいます!」
そんなこんなで俺はPerlを教えることになったのだ。
「やれやれだ」


(第一章プロローグより)

会話形式で、進んでいくので、Perlを学びながら楽しく読み進めていくことができます。

第二章。

第三章。

「表紙のかわいらしさ」とは裏腹に、内容はガチ。Perlの基本的なことがらをもれなく学ぶことができる。

目次

  1. プロローグ
  2. Perlを知ろう
  3. Perlの開発環境を整えよう
  4. スカラー
  5. 配列とリスト
  6. ハッシュ
  7. サブルーチン
  8. コンテキスト
  9. 正規表現
  10. リファレンス
  11. CPAN
  12. パッケージ
  13. モジュール
  14. オブジェクト指向
  15. テスト
  16. ファイル入出力
  17. 文字エンコーディング
  18. CPANモジュールガイド
  19. Perl6入門

初めてPerlを学ぶ学生の方や社会人1年目でPerlを使うことになったエンジニアの方にお勧め。

ページ数は226ページで、基本を学ぶには十分なボリューム。

価格は1500円 + 送料。

購入方法

注:雅なPerl入門は同人誌です。一般の書店やオンラインストアでは現在は販売されていません。

購入方法

作者の雅なラクダさんに、Twitterのメッセージあるいはダイレクトメッセージで以下のようにお伝えください。

「雅なPerl入門」購入希望

購入方法の手続きを教えてもらうことができます。

Perl 5.28リリース - Unicode 10.0サポート、文字列連結の高速化、ref関数、keys関数、forループの高速化

20180626074702

Perl 5.28が2018年6月22日にリリースされました。Perl 5.28でうれしい機能をピックアップして紹介。

Unicode 10.0サポート

Unicode 10.0がサポートされました。56種類の新しい絵文字が使えるようです。

文字列連結の高速化

複数の文字列連結が、高速化されました。内部的にmulticoncatという一つのオペコードで処理するようになったからです。

以下のようなコードが高速化されます。

    $s .= "a=$a b=$b\n"


たとえば、x86_64のシステムでは、以下の文字列連結のコードが4倍高速化されます。

    my $s;
    my $a = "ab\x{100}cde";
    my $b = "fghij";
    my $c = "\x{101}klmn";

    for my $i (1..10_000_000) {
        $s = "\x{100}wxyz";
        $s .= "foo=$a bar=$b baz=$c";
    }

さらに加えて定数文字列を含むsprintfもmulticoncatを使って、最適化されています。

ref関数の高速化

真偽値コンテキストではref関数がかなり速くなりました。真偽値コンテキストでは、一時的な文字列を作成しなくなったからです。

keys関数の高速化

keys関数は、スカラコンテキストでより最適化されました。

forループの高速化

forループとそれに類似した構文は、ほとんどのケースで、より効率的になりました。

perl -iによる置換が安全に

perl -iによるファイル内容の置換は、編集中はバックアップがとられるようになり、安全になりました。

Cent OS 5でインストールできないバグを修正

Perl 5.26はCent OS 5にインストールできませんでしたが、Perl 5.28では、インストールできるようになっています。僕の環境でも試して、インストールできることを確認!

実験的なサブルーチンシグネチャにおける属性の位置が変更

実験的なサブルーチンシグネチャにおける属性の位置が変更されました。

変更前 sub foo ($foo, $bar) : attr;
変更後 sub foo : attr ($foo, $bar)

互換性のない変更

PerlはC89が必須に

PerlコンパイルにはC89がコンパイルできるコンパイラが必須になりました。C99やC11ではないので、見間違わないでね。

${^ENCODING}への値の設定は不正になりました

もし過去に、${^ENCODING}を設定している方がいればご注意。

sortプラグマによるsortアルゴリズムが指定できなくなりました

sortプラグマによるsortアルゴリズムが指定できなくなりました。常に、Perlデフォルトのsortアルゴリズムが使用されます。

Perl 5.28リリース雑感

今回のリリースは、小さなパフォーマンス改善が中心となるリリースに感じます。文字列のパフォーマンス改善は、すべてのPerlユーザーのメリットになるので、とてもうれしい。

最近のPerlでは、真偽値コンテキストのリファクタリングがされていて、文字列を返さなくって良い場所では、1が返されるようになって、これが高速化につながっている。

まだまだ息の長いCent OS 5にも最新のPerlがインストールできるようになって「一度書けば、Perlどこでも動くよ」って感じですね。