如何在 perlbrew 中显示所有可用的 perl?
How to display all available perls in perlbrew?
我可以通过 perlbrew available
列出所有可用的 perls
kes@kes-X751SA ~ $ pb available
perl-5.32.0
perl-5.30.3
perl-5.28.3
perl-5.26.3
perl-5.24.4
perl-5.22.4
perl-5.20.3
perl-5.18.4
perl-5.16.3
perl-5.14.4
perl-5.12.5
perl-5.10.1
perl-5.8.9
perl-5.6.2
perl5.005_03
perl5.004_05
cperl-5.29.2
cperl-5.30.0
cperl-5.30.0-RC1
但是这个列表只包含 latest
个可用的 perls。例如,我没有从这个列表中看到当前安装的 perl from perlbrew
kes@kes-X751SA ~ $ which perl
/home/kes/perl5/perlbrew/perls/perl-5.24.1/bin/perl
我试过 perlbrew available --verbose
但这不是 full
列表:
kes@kes-X751SA ~ $ pb available --verbose
perl-5.32.0 available from <https://www.cpan.org/src/5.0/perl-5.32.0.tar.gz>
perl-5.30.3 available from <https://www.cpan.org/src/5.0/perl-5.30.3.tar.gz>
perl-5.28.3 available from <https://www.cpan.org/src/5.0/perl-5.28.3.tar.gz>
perl-5.26.3 available from <https://www.cpan.org/src/5.0/perl-5.26.3.tar.bz2>
perl-5.24.4 available from <https://www.cpan.org/src/5.0/perl-5.24.4.tar.gz>
perl-5.22.4 available from <https://www.cpan.org/src/5.0/perl-5.22.4.tar.bz2>
perl-5.20.3 available from <https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2>
perl-5.18.4 available from <https://www.cpan.org/src/5.0/perl-5.18.4.tar.bz2>
perl-5.16.3 available from <https://www.cpan.org/src/5.0/perl-5.16.3.tar.bz2>
perl-5.14.4 available from <https://www.cpan.org/src/5.0/perl-5.14.4.tar.bz2>
perl-5.12.5 available from <https://www.cpan.org/src/5.0/perl-5.12.5.tar.bz2>
perl-5.10.1 available from <https://www.cpan.org/src/5.0/perl-5.10.1.tar.bz2>
perl-5.8.9 available from <https://www.cpan.org/src/5.0/perl-5.8.9.tar.bz2>
perl-5.6.2 available from <https://www.cpan.org/src/5.0/perl-5.6.2.tar.gz>
perl5.005_03 available from <https://www.cpan.org/src/5.0/perl5.005_03.tar.gz>
perl5.004_05 available from <https://www.cpan.org/src/5.0/perl5.004_05.tar.gz>
cperl-5.29.2 available from <https://github.com/perl11/cperl/archive/cperl-5.29.2.tar.gz>
cperl-5.30.0-RC1 available from <https://github.com/perl11/cperl/archive/cperl-5.30.0-RC1.tar.gz>
cperl-5.30.0 available from <https://github.com/perl11/cperl/archive/cperl-5.30.0.tar.gz>
是否有显示所有可用 perls 的选项?
Usage: perlbrew available [--all]
List the recently available versions of perl on CPAN.
The list is retrieved from the web page
http://www.cpan.org/src/README.html, and is not the list of all perl
versions ever released in the past.
To get a list of all perls ever released, use the --all
option.
所以你可以使用:
$ perlbrew available --all
perlbrew available --all
可用于列出所有可用版本。
但这实际上没有用。这将包括以下附加版本:
- 开发版本
也许您想使用最新的开发版本测试您的代码。
很难在 --all
中发现它;您最好访问 this 并单击版本前的“v”箭头。
- 候选发布
也许您想使用最新的候选发布来测试您的代码。
很难在 --all
中发现它;您最好访问 this 并单击版本前的“v”箭头。
- 较早的次要版本
没有理由列出这些,因为次要版本从 0
单调增加。因此,如果您知道次要版本 .4 存在(来自 perlbrew available
),那么您就知道 .3、.2、.1 和 .0 也存在。
也就是说,OP 在评论中建议他们实际上想要一个 已安装 版本的列表。
perlbrew
没有提供获取它的方法。该版本通常用作安装名称的一部分,因此您 perlbrew list
可用于近似。
5.32.0t
5.32t
* latest
5.30.2t
5.30t
acpcw
gloomhaven
5.28.2t
5.28t
...
但是如您所见,它并不总是有效。我目前正在使用一个叫 latest
的东西,它没有给我一个版本。
要获取实际列表,您可以使用以下方法:
use 5.014;
use warnings;
use IPC::System::Simple qw( capturex );
use Sort::Key::Natural qw( natsort rnatsort );
my $root_dir_qfn = $ENV{PERLBREW_ROOT} // "$ENV{HOME}/perl5/perlbrew"; # "
my $perls_dir_qfn = "$root_dir_qfn/perls";
opendir(my $dh, $perls_dir_qfn)
or die("Can't open dir \"$perls_dir_qfn\": $!\n");
my %versions;
while (defined( my $name = readdir($dh) )) {
next if $name =~ /^\./;
my $perl_dir_qfn = "$perls_dir_qfn/$name";
eval {
my $version = capturex("$perl_dir_qfn/bin/perl", "-e", 'print $^V');
die "Program exited with error ".( $? >> 8 )."\n" if $?;
push @{ $versions{$version} }, $name;
return 1; # No exception.
}
or warn("Can't get version for \"$name\": $@");
}
for my $version (rnatsort keys(%versions)) {
say "$version: " . join(" ", natsort @{ $versions{$version} });
}
输出:
v5.32.0: 5.32.0t 5.32t latest
v5.30.2: 5.30.2t 5.30t acpcw gloomhaven
v5.28.2: 5.28.2t 5.28t
v5.26.3: 5.26.3t 5.26t
v5.26.1: system
v5.24.4: 5.24.4t 5.24t
v5.22.4: 5.22.4t 5.22t
v5.20.3: 5.20.3t 5.20t
v5.18.4: 5.18.4t 5.18t
v5.16.3: 5.16.3t 5.16t
v5.14.4: 5.14.4t 5.14t
v5.12.5: 5.12.5t 5.12t
v5.10.1: 5.10.1t 5.10t
以上程序不处理不支持 $^V
的 Perl 版本,但使用 $] < ... ? $] : eval('$^V')
.
很容易处理
上述程序也可以修改为按线程支持、arch 等分组
我可以通过 perlbrew available
kes@kes-X751SA ~ $ pb available
perl-5.32.0
perl-5.30.3
perl-5.28.3
perl-5.26.3
perl-5.24.4
perl-5.22.4
perl-5.20.3
perl-5.18.4
perl-5.16.3
perl-5.14.4
perl-5.12.5
perl-5.10.1
perl-5.8.9
perl-5.6.2
perl5.005_03
perl5.004_05
cperl-5.29.2
cperl-5.30.0
cperl-5.30.0-RC1
但是这个列表只包含 latest
个可用的 perls。例如,我没有从这个列表中看到当前安装的 perl from perlbrew
kes@kes-X751SA ~ $ which perl
/home/kes/perl5/perlbrew/perls/perl-5.24.1/bin/perl
我试过 perlbrew available --verbose
但这不是 full
列表:
kes@kes-X751SA ~ $ pb available --verbose
perl-5.32.0 available from <https://www.cpan.org/src/5.0/perl-5.32.0.tar.gz>
perl-5.30.3 available from <https://www.cpan.org/src/5.0/perl-5.30.3.tar.gz>
perl-5.28.3 available from <https://www.cpan.org/src/5.0/perl-5.28.3.tar.gz>
perl-5.26.3 available from <https://www.cpan.org/src/5.0/perl-5.26.3.tar.bz2>
perl-5.24.4 available from <https://www.cpan.org/src/5.0/perl-5.24.4.tar.gz>
perl-5.22.4 available from <https://www.cpan.org/src/5.0/perl-5.22.4.tar.bz2>
perl-5.20.3 available from <https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2>
perl-5.18.4 available from <https://www.cpan.org/src/5.0/perl-5.18.4.tar.bz2>
perl-5.16.3 available from <https://www.cpan.org/src/5.0/perl-5.16.3.tar.bz2>
perl-5.14.4 available from <https://www.cpan.org/src/5.0/perl-5.14.4.tar.bz2>
perl-5.12.5 available from <https://www.cpan.org/src/5.0/perl-5.12.5.tar.bz2>
perl-5.10.1 available from <https://www.cpan.org/src/5.0/perl-5.10.1.tar.bz2>
perl-5.8.9 available from <https://www.cpan.org/src/5.0/perl-5.8.9.tar.bz2>
perl-5.6.2 available from <https://www.cpan.org/src/5.0/perl-5.6.2.tar.gz>
perl5.005_03 available from <https://www.cpan.org/src/5.0/perl5.005_03.tar.gz>
perl5.004_05 available from <https://www.cpan.org/src/5.0/perl5.004_05.tar.gz>
cperl-5.29.2 available from <https://github.com/perl11/cperl/archive/cperl-5.29.2.tar.gz>
cperl-5.30.0-RC1 available from <https://github.com/perl11/cperl/archive/cperl-5.30.0-RC1.tar.gz>
cperl-5.30.0 available from <https://github.com/perl11/cperl/archive/cperl-5.30.0.tar.gz>
是否有显示所有可用 perls 的选项?
Usage:
perlbrew available [--all]
List the recently available versions of perl on CPAN.
The list is retrieved from the web page http://www.cpan.org/src/README.html, and is not the list of all perl versions ever released in the past.
To get a list of all perls ever released, use the
--all
option.
所以你可以使用:
$ perlbrew available --all
perlbrew available --all
可用于列出所有可用版本。
但这实际上没有用。这将包括以下附加版本:
- 开发版本
也许您想使用最新的开发版本测试您的代码。
很难在--all
中发现它;您最好访问 this 并单击版本前的“v”箭头。 - 候选发布
也许您想使用最新的候选发布来测试您的代码。
很难在--all
中发现它;您最好访问 this 并单击版本前的“v”箭头。 - 较早的次要版本
没有理由列出这些,因为次要版本从0
单调增加。因此,如果您知道次要版本 .4 存在(来自perlbrew available
),那么您就知道 .3、.2、.1 和 .0 也存在。
也就是说,OP 在评论中建议他们实际上想要一个 已安装 版本的列表。
perlbrew
没有提供获取它的方法。该版本通常用作安装名称的一部分,因此您 perlbrew list
可用于近似。
5.32.0t
5.32t
* latest
5.30.2t
5.30t
acpcw
gloomhaven
5.28.2t
5.28t
...
但是如您所见,它并不总是有效。我目前正在使用一个叫 latest
的东西,它没有给我一个版本。
要获取实际列表,您可以使用以下方法:
use 5.014;
use warnings;
use IPC::System::Simple qw( capturex );
use Sort::Key::Natural qw( natsort rnatsort );
my $root_dir_qfn = $ENV{PERLBREW_ROOT} // "$ENV{HOME}/perl5/perlbrew"; # "
my $perls_dir_qfn = "$root_dir_qfn/perls";
opendir(my $dh, $perls_dir_qfn)
or die("Can't open dir \"$perls_dir_qfn\": $!\n");
my %versions;
while (defined( my $name = readdir($dh) )) {
next if $name =~ /^\./;
my $perl_dir_qfn = "$perls_dir_qfn/$name";
eval {
my $version = capturex("$perl_dir_qfn/bin/perl", "-e", 'print $^V');
die "Program exited with error ".( $? >> 8 )."\n" if $?;
push @{ $versions{$version} }, $name;
return 1; # No exception.
}
or warn("Can't get version for \"$name\": $@");
}
for my $version (rnatsort keys(%versions)) {
say "$version: " . join(" ", natsort @{ $versions{$version} });
}
输出:
v5.32.0: 5.32.0t 5.32t latest
v5.30.2: 5.30.2t 5.30t acpcw gloomhaven
v5.28.2: 5.28.2t 5.28t
v5.26.3: 5.26.3t 5.26t
v5.26.1: system
v5.24.4: 5.24.4t 5.24t
v5.22.4: 5.22.4t 5.22t
v5.20.3: 5.20.3t 5.20t
v5.18.4: 5.18.4t 5.18t
v5.16.3: 5.16.3t 5.16t
v5.14.4: 5.14.4t 5.14t
v5.12.5: 5.12.5t 5.12t
v5.10.1: 5.10.1t 5.10t
以上程序不处理不支持 $^V
的 Perl 版本,但使用 $] < ... ? $] : eval('$^V')
.
上述程序也可以修改为按线程支持、arch 等分组