plenv - ユーザー環境にPerlをインストールする
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などエラーがでた場合は、以下の記事を元に、フィックスをこころみましょう。
- [https://qiita.com/DQNEO/items/890b99134be0ad81d174:title=[対処法] 599 Internal Exception, https://fastapi.metacpan.org/v1/release/_search]
- want to check Mozilla :: CA
どうしてもうまくいかない場合は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
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のインストール
macOSの環境には、すでにPerlがインストールされています。
以下のコマンドでPerlがインストールされているか確認してみましょう。
perl -v
バージョン情報が表示されれば、OKです。
さっそく、Perlを使い始めてみましょう。
ユーザー環境へのPerlのインストール
最新のPerlなどを使いたい場合は、ユーザー環境にPerlをインストールすることもできます。
自分のユーザー環境にPerlをインストールしたい場合はperlbrewあるいはplenvというツールを使うことができます。
ルート権限が必要ないので、インストールが簡単で、OSの環境を汚しません。最新のPerlをインストールして使うことができます。
本番環境のWebサービスでPerlを実行する場合は、この方法が2018年現在は主流となっています。
perlbrewとplenvはどちらも、似ているツールで、ユーザー環境にPerlをインストールするためのツールです。お好みで選択してください。
macOSでターミナルを立ち上げてから、以下の手順を実行してください。
- perlbrew - ユーザー環境にPerlをインストールする
- plenv - ユーザー環境にPerlをインストールする(準備中)
Unix/LinuxへのPerlのインストール
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をインストールするためのツールです。お好みで選択してください。
- perlbrew - ユーザー環境にPerlをインストールする
- plenv - ユーザー環境にPerlをインストールする(準備中)
Strawberry PerlをWindowsにインストールする
Strawberry Perl(ストロベリーパール)はWindowsでPerlを利用するために作成されたPerlのディストリビューションのひとつです。
Strawberry Perlの良いところは、
です。
PerlのUnix生まれの言語なので、WindowsでもなるべくUnix環境に近い感覚で利用できると使いやすく感じます。
Strawberry Perlを使うと、ほとんどのCPANモジュールがインストールが可能です。
古いバージョンのPerlもそのまま残してくれているので、開発をしていて、古いPerlがダウンロードできなくなったという心配もありません。
WindowsでPerlを利用する場合は、一番最初に試してみてほしい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のインストールは完了です。
WindowsでPerlを実行するためにはコマンドプロンプトと呼ばれるものを利用します。perlコマンドを使ってPerlスクリプトを実行できるようになります。
コマンドプロンプトの使い方を知りたい方は「Perlを実行するためのコマンドプロンプト入門」という記事で解説しています。
FAQ
その他のインストール方法
msys2をWindowsにインストールしてPerlを使う
msys2をWindowsにインストールしてPerlを使う方法を解説します。
msys2(エムシスツー)は、Windows上でLinux風のシェル環境を提供するツールです。PerlはUnix生まれですので、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を利用できるようにします。PerlとPerlで必要となる開発環境の一覧をまとめてインストールしましょう。
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
お願い
msys2は定期的にアップデートされて、パッケージ名やアップデートコマンドが変わったりするので、この手順でうまくいかない場合は、コメント欄かTwitterにてお知らせください。
雅なPerl入門 - 雅ちゃんが大学生クロウにPerlを学ぶ物語
雅(みやび)なPerl入門は、雅ちゃんが大学生クロウにPerlを学ぶ物語形式で、Perlを学べる入門書。
「Perlを教えてくださいっ!」
ある日突然、twitterのダイレクトメッセージにメッセージが飛び込んできた。それは女の子からのものだった。どうせまたスパムだろう。最初はそう思っていたのでメッセージを無視し続けていたのだ。しかし、その後もメッセージは送られ続けてきた。
そんな俺がPerlを教えることになるとは。ただ、俺は面倒見は良い方だから、こういう話は断れない性格なのだ。決して女の子にPerlを教えたいがためではないのだ。
「ところで名前はなんていうの?」
「雅といいます!」
そんなこんなで俺はPerlを教えることになったのだ。
「やれやれだ」
(第一章プロローグより)
会話形式で、進んでいくので、Perlを学びながら楽しく読み進めていくことができます。
第二章。
第三章。
「表紙のかわいらしさ」とは裏腹に、内容はガチ。Perlの基本的なことがらをもれなく学ぶことができる。
目次
初めてPerlを学ぶ学生の方や社会人1年目でPerlを使うことになったエンジニアの方にお勧め。
ページ数は226ページで、基本を学ぶには十分なボリューム。
価格は1500円 + 送料。
Perl 5.28リリース - Unicode 10.0サポート、文字列連結の高速化、ref関数、keys関数、forループの高速化
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ループとそれに類似した構文は、ほとんどのケースで、より効率的になりました。
Cent OS 5でインストールできないバグを修正
Perl 5.26はCent OS 5にインストールできませんでしたが、Perl 5.28では、インストールできるようになっています。僕の環境でも試して、インストールできることを確認!
実験的なサブルーチンシグネチャにおける属性の位置が変更
実験的なサブルーチンシグネチャにおける属性の位置が変更されました。
変更前 sub foo ($foo, $bar) : attr; 変更後 sub foo : attr ($foo, $bar)
互換性のない変更
${^ENCODING}への値の設定は不正になりました
もし過去に、${^ENCODING}を設定している方がいればご注意。