Skip to content

Commit c1bf8a4

Browse files
committed
support finding perl via plenv
1 parent 27101ef commit c1bf8a4

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

bin/plx

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ sub resolve_perl_via_perlbrew {
461461
my ($self, $perl) = @_;
462462
stderr "Resolving perl '${perl}' via perlbrew";
463463
local %ENV = our %orig_env;
464-
barf "Couldn't find perlbrew in \$PATH"
464+
stderr "Couldn't find perlbrew in \$PATH", return
465465
unless my $perlbrew = File::Which::which('perlbrew');
466466
my @list = $self->slurp_command($perlbrew, 'list');
467467
barf join(
@@ -473,6 +473,23 @@ sub resolve_perl_via_perlbrew {
473473
return $perl_path;
474474
}
475475

476+
sub resolve_perl_via_plenv {
477+
my ($self, $perl) = @_;
478+
stderr "Resolving perl '${perl}' via plenv";
479+
local %ENV = our %orig_env;
480+
stderr "Couldn't find plenv in \$PATH", return
481+
unless my $plenv = File::Which::which('plenv');
482+
my @list = $self->slurp_command($plenv, 'versions');
483+
barf join(
484+
"\n", "No such plenv perl '${perl}', choose from:\n", @list, ''
485+
) unless grep $_ eq $perl, map /(\S+)/, @list;
486+
my ($perl_path) = do { local $ENV{PLENV_VERSION} = $perl;
487+
$self->slurp_command( $plenv, qw(which perl) );
488+
};
489+
return $perl_path;
490+
}
491+
492+
476493
sub run_config_perl_set {
477494
my ($self, $new_perl) = @_;
478495
barf "plx --config perl set <perl>" unless $new_perl;
@@ -485,8 +502,13 @@ sub run_config_perl_set {
485502
if (my $resolved = File::Which::which($new_perl)) {
486503
$new_perl = $resolved;
487504
} else {
488-
$new_perl =~ s/^perl5/perl-5/; # perl binary to perlbrew name
489-
$new_perl = $self->resolve_perl_via_perlbrew($new_perl);
505+
$new_perl =
506+
do {
507+
# convert perl binary to perlbrew name
508+
$self->resolve_perl_via_perlbrew( do { ( my $new_perl = $new_perl ) =~ s/^perl5/perl-5/ ; $new_perl } )
509+
# try plenv, but use the actual spec the user passed.
510+
// $self->resolve_perl_via_plenv($perl_spec);
511+
} or barf "Couldn't find perl '${new_perl}'";
490512
}
491513
}
492514
barf "Not executable: $new_perl" unless -x $new_perl;

0 commit comments

Comments
 (0)