Skip to content

Commit b656f11

Browse files
committed
support finding perl via plenv
1 parent 2578b01 commit b656f11

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
@@ -473,7 +473,7 @@ sub resolve_perl_via_perlbrew {
473473
my ($self, $perl) = @_;
474474
stderr "Resolving perl '${perl}' via perlbrew";
475475
local %ENV = our %orig_env;
476-
barf "Couldn't find perlbrew in \$PATH"
476+
stderr "Couldn't find perlbrew in \$PATH", return
477477
unless my $perlbrew = File::Which::which('perlbrew');
478478
my @list = $self->slurp_command($perlbrew, 'list');
479479
barf join(
@@ -485,6 +485,23 @@ sub resolve_perl_via_perlbrew {
485485
return $perl_path;
486486
}
487487

488+
sub resolve_perl_via_plenv {
489+
my ($self, $perl) = @_;
490+
stderr "Resolving perl '${perl}' via plenv";
491+
local %ENV = our %orig_env;
492+
stderr "Couldn't find plenv in \$PATH", return
493+
unless my $plenv = File::Which::which('plenv');
494+
my @list = $self->slurp_command($plenv, 'versions');
495+
barf join(
496+
"\n", "No such plenv perl '${perl}', choose from:\n", @list, ''
497+
) unless grep $_ eq $perl, map /(\S+)/, @list;
498+
my ($perl_path) = do { local $ENV{PLENV_VERSION} = $perl;
499+
$self->slurp_command( $plenv, qw(which perl) );
500+
};
501+
return $perl_path;
502+
}
503+
504+
488505
sub run_config_perl_set {
489506
my ($self, $new_perl) = @_;
490507
barf "plx --config perl set <perl>" unless $new_perl;
@@ -497,8 +514,13 @@ sub run_config_perl_set {
497514
if (my $resolved = File::Which::which($new_perl)) {
498515
$new_perl = $resolved;
499516
} else {
500-
$new_perl =~ s/^perl5/perl-5/; # perl binary to perlbrew name
501-
$new_perl = $self->resolve_perl_via_perlbrew($new_perl);
517+
$new_perl =
518+
do {
519+
# convert perl binary to perlbrew name
520+
$self->resolve_perl_via_perlbrew( do { ( my $new_perl = $new_perl ) =~ s/^perl5/perl-5/ ; $new_perl } )
521+
# try plenv, but use the actual spec the user passed.
522+
// $self->resolve_perl_via_plenv($perl_spec);
523+
} or barf "Couldn't find perl '${new_perl}'";
502524
}
503525
}
504526
barf "Not executable: $new_perl" unless -x $new_perl;

0 commit comments

Comments
 (0)