Is there a non-global equivalent of perlbrew?
Asked Answered
L

2

5

I'm using perlbrew right now to manage multiple versions of perl, but perlbrew is global. If I do perlbrew switch perl-5.10.1 in any shell, then all shells and scripts will now be using perl version 5.10.1. There is no isolation. Is there any way to make perlbrew switches local to a shell, or is there a similar tool capable of locally changing the active perl?

Lacerate answered 8/10, 2010 at 21:18 Comment(2)
See also How should I install more than one version of Perl? and [#398721 do you manage Perl modules when using a package manager?)Knockknee
See this related SO question/answer: #3776890Erepsin
L
4

In more recent versions of Perlbrew, you can do perlbrew use perl-5.12.3 or whatever and you'll be using that version of Perl, but only in the current shell session. Other sessions won't be affected.

Larrigan answered 18/2, 2011 at 12:59 Comment(1)
I'll have to try this out. It looks like exactly what I want.Lacerate
D
5

Just don't use perlbrew. All it's doing is changing symlinks for you. It's supposed to save you work, but when it's not, there's no longer a reason to use it.

I talk about how I do it in Make links to per-version tools in The Effective Perler. I always know which perl I'm using because I never have to remember which one I switched to last, and I don't disturb anything else expecting a particular version behind a symlink. You can still use perlbrew to install perls, but it's not saving you that much work there either.

Dawes answered 8/10, 2010 at 22:2 Comment(6)
Also discussed here in more detail.Knockknee
I know I can always install perl 5.10.1 as perl5.10.1 in my path and then specify versions explicitly, but I guess that the behavior that I'm looking for is that perl runs a certain default version of perl. Then if I run perlbrew switch in one shell, then perl in that shell refers to the new version, but all other shells and programs continue to run the default perl. And ditto for the rest of the perl environment: modules, executables, manpages/perldocs. I suppose I'll have to learn how to use the Furlani Modules package that your article links to in order to get what I want.Lacerate
Actually it probably wouldn't be hard to give perlbrew the option to only affect a local shell environment -- since it already writes bashrc/cshrc files that means it can install shell aliases/functions. Write one that modifies PATH instead of switching symlinks and you're golden. I might give it a try.Daph
Doing perlbrew with environment variables is more complicated than just messing with PATH, though. You would also have to change a few other environment variables (e.g. MANPATH to get correct documentation when you do man Some::Module).Lacerate
@Ryan perlbrew doesn't do anything about those things now -- man doesn't find anything inside a perlbrew, for instance. All it does is put a directory into PATH and symlink things into that directory.Daph
Does perldoc even use MANPATH?Knockknee
L
4

In more recent versions of Perlbrew, you can do perlbrew use perl-5.12.3 or whatever and you'll be using that version of Perl, but only in the current shell session. Other sessions won't be affected.

Larrigan answered 18/2, 2011 at 12:59 Comment(1)
I'll have to try this out. It looks like exactly what I want.Lacerate

© 2022 - 2024 — McMap. All rights reserved.