Как вывести все доступные перлы в Perlbrew? - PullRequest
3 голосов
/ 13 июля 2020

Я могу перечислить все доступные перлы через 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 доступных перлов. Например, я не видел в этом списке установленных на данный момент perl от 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>

Есть ли опция, которая отображает все доступные перлы?

Ответы [ 2 ]

5 голосов
/ 13 июля 2020

Согласно документации :

Использование: perlbrew available [--all]

Список последних доступных версий perl на CPAN.

Список извлекается с веб-страницы http://www.cpan.org/src/README.html и не является списком всех perl версий, когда-либо выпущенных в прошлом.

Кому получите список из всех когда-либо выпущенных Perl , используйте опцию --all.

, чтобы вы могли использовать:

$ perlbrew available --all
2 голосов
/ 13 июля 2020

perlbrew available --all можно использовать для перечисления всех доступных выпусков.

Но на самом деле это бесполезно. Это будет включать следующие дополнительные версии:

  • Разрабатываемая версия
    Возможно, вы захотите протестировать свой код с помощью последней версии разработчика.
    Будет сложно обнаружить в --all; вам лучше посетить этот и щелкнуть стрелку «v» перед версией.
  • Релиз-кандидаты
    Возможно, вы хотите протестировать свой код, используя последний релиз-кандидат.
    В --all сложно будет заметить; вам лучше посетить этот и щелкнуть стрелку «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

Вышеупомянутая программа не обрабатывает версии Perl, которые не поддерживают $^V, но с этим легко справиться, используя $] < ... ? $] : eval('$^V').

Приведенная выше программа может также можно изменить для группировки по поддержке потоков, арке и т. д. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...