質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

3回答

541閲覧

説明補足特定のディレクトリでPerlのバージョンを使うには

yochun02

総合スコア76

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

1クリップ

投稿2020/01/20 10:53

編集2020/01/21 06:54

ホームディレクトリのある作業ディレクトリ内でのみ古いバージョンのperlを利用したいのですが、その設定方法はどうすればよいのでしょうか?
ネット上にあるものだとPerl用のバージョン管理ツール(perlbrew)を利用したりする情報がありますが、手動で設定する方法が知りたいです。

環境

OS: ubuntu18.04
perlはもともと入っているバージョン

plain

1~$ perl -v 2This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi 3(with 67 registered patches, see perl -V for more detail) 4 5Copyright 1987-2017, Larry Wall 6 7Perl may be copied only under the terms of either the Artistic License or the 8GNU General Public License, which may be found in the Perl 5 source kit. 9 10Complete documentation for Perl, including FAQ lists, should be found on 11this system using "man perl" or "perldoc perl". If you have access to the 12Internet, point your browser at http://www.perl.org/, the Perl Home Page.

~/tmpにwgetで旧verのperlをダウンロード
~/tmp/perl-5.24.4

やりたいこと

~/workディレクトリより上層ではデフォルトのバージョン(v5.26.1)、
~/work以内の下層ディレクトリにおいては旧バージョンv5.24.4
を利用したいです。

例)
【~/workと同層or上層】
~/hoge → v5.26.1
/fuga → v5.26.1

【~/work or それより下層】
~/work → v5.24.4
~/work/piyo → v5.24.4

インストール先
~/work/perl/5_24_4/bin/perl, perl5.24.4 ← ここに実行ファイルがある

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

plenvを使えばすぐにできますが、自力でするならplenvがやっていることをなぞることになるでしょう。おおよそ:

  1. ~/bin/のようなディレクトリを作ってそこを環境変数PATHの先頭に追加する。
  2. 「カレントディレクトリによって起動する実行ファイルを変える」シェルスクリプトを作って、作成したディレクトリにperlという名前で置く。

といった形になります。

ちなみにplenvが使うperlスクリプトはこんな形です。

shellscript

1#!/usr/bin/env bash 2set -e 3[ -n "$PLENV_DEBUG" ] && set -x 4 5program="${0##*/}" 6if [ "$program" == "perl" ]; then 7 for arg; do 8 [[ "$arg" =~ ^(--$|-[0A-Za-z]*[eE].*) ]] && break 9 if [[ "$arg" =~ / ]] && [ -f "$arg" ]; then 10 export PLENV_DIR="${arg%/*}" 11 break 12 fi 13 done 14fi 15 16export PLENV_ROOT="/Users/user/.plenv" 17exec "/usr/local/Cellar/plenv/2.3.0/libexec/plenv" exec "$program" "$@"

処理の本体は https://github.com/tokuhirom/plenv/tree/master/libexec 以下にあるので見てみるとよいと思います。

投稿2020/01/30 12:26

編集2020/01/30 17:05
harrek

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

direnv を使う方法があります。

https://qiita.com/kompiro/items/5fc46089247a56243a62

投稿2020/01/20 21:53

bunzaemon

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これでどうでしょう。

  1. PATHの先頭に.を追加。
  2. mv ~/tmp/perl-5.24.4 ~/work/perl

投稿2020/01/20 12:22

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yochun02

2020/01/21 06:55 編集

パスについてなんですが、.はカレントディレクトリを優先するという理解でしょうか? 試しに $ PATH=.:$PATH $ exprot PATH としてみたのですが、うまくいきませんでした。 ~$ perl -v This is perl, v5.26.1 built for x86_64-linux ... ~/work$ perl -v This is perl, v5.26.1 built for x86_64-linux ... ~/work/perl/5_24_4/bin$ perl -v This is perl 5, version 24, subversion 1 (v5.24.4) built for x86_64-linux
KojiDoi

2020/01/21 06:37

mv しなきゃだめですよ。
KojiDoi

2020/01/21 06:39

あ、/tmp/perl-5.24.4 はディレクトリだったのですね。 実行ファイルを~/workに移してください。
yochun02

2020/01/21 06:55 編集

なるほど、しかしこの方法だと、workよりも深い場所でもperlのバージョンはv5.24.4になりますか? 説明不足でしたが、~/work以下(その子のファイル以降)はv5.24.4になっていてほしいです。(質問に補足しました。)
KojiDoi

2020/01/21 07:02

> /work以下(その子のファイル以降)はv5.24.4になっていてほしいです。 それは無理ですね。 私に思いつく対案は以下のとおりです。これが要件に合わないなら申し訳ない。 * 標準でない方のperl実行ファイルを/usr/local/bin/perl-5.24.4などとしておいておき、どこのディレクトリで作業するかに関わらず、使いたいperlのバージョンを明示的に指定するようにする。 * その作業ディレクトリをDockerの仮想環境に移す。
yochun02

2020/01/21 10:46

いえいえ、回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問