@@ -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+
488505sub 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