在 CentOS 中安装 Perl v5.32

vin*_*k89 2 linux perl centos

我的 Oracle VM VirtualBox 中安装了 Centos 8(64 位)。

当我在云会议中听到有关 Perl 7 发布的消息时!一个 Perl 和 Raku Conf,渴望在我的 CentOS 中安装它。

我尝试按照CPAN官方网站中提到的命令安装(作为root)。Perl v5.32

wget https://www.cpan.org/src/5.0/perl-5.32.0.tar.gz
tar -xzf perl-5.32.0.tar.gz
cd perl-5.32.0
./Configure -des -Dprefix=$HOME/localperl
make
make test
make install
Run Code Online (Sandbox Code Playgroud)

早些时候我已经Perl v5.26安装在我的系统中。

[vinod@localhost ~]$ perl -v

This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi
(with 51 registered patches, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Run Code Online (Sandbox Code Playgroud)

即使按照上述步骤升级 Perl 版本,我也没有成功。

Perl v5.26当我在运行上述命令后检查版本时,它仍然显示我。

我想知道,是我做错了什么,还是运行命令来获取 Perl 的升级版本不是正确的方法。

ike*_*ami 5

首先,5.32 和 7.0 是 Perl 的两个不同版本。后者会在前者的基础上,但会有所不同,目前还没有发布。


你没有改变你的PATH,所以/usr/bin/perl仍然是perl你使用时发现的perl

您可以提供perl您安装的路径( $HOME/localperl/bin/perl),或者您可以调整您的路径,PATH以便$HOME/localperl/bin/usr/bin.

我使用perlbrew. 它可以帮助您安装 Perl,并且只需键入perl.

$ perlbrew use 5.30t

$ perl -v | grep 'This is'
This is perl 5, version 30, subversion 2 (v5.30.2) built for x86_64-linux-thread-multi

$ perlbrew use 5.28t

$ perl -v | grep 'This is'
This is perl 5, version 28, subversion 2 (v5.28.2) built for x86_64-linux-thread-multi
Run Code Online (Sandbox Code Playgroud)

我的设置:

$ \ls -Fl "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/perls  # Output rearranged.
total 0
drwx------ 1 ikegami ikegami 4096 Mar 15 20:32 system/

drwxr-xr-x 1 ikegami ikegami 4096 May 22 14:12 5.10.1t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:41 5.10t -> 5.10.1t/
drwxr-xr-x 1 ikegami ikegami 4096 May 22 14:51 5.12.5t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:42 5.12t -> 5.12.5t/
drwxr-xr-x 1 ikegami ikegami 4096 May 22 16:39 5.14.4t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:42 5.14t -> 5.14.4t/
drwxr-xr-x 1 ikegami ikegami 4096 May 23 12:58 5.16.3t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:42 5.16t -> 5.16.3t/
drwxr-xr-x 1 ikegami ikegami 4096 May 23 16:45 5.18.4t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:42 5.18t -> 5.18.4t/
drwxr-xr-x 1 ikegami ikegami 4096 May 24 13:44 5.20.3t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:42 5.20t -> 5.20.3t/
drwxr-xr-x 1 ikegami ikegami 4096 May 24 16:41 5.22.4t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:42 5.22t -> 5.22.4t/
drwxr-xr-x 1 ikegami ikegami 4096 May 24 21:41 5.24.4t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:43 5.24t -> 5.24.4t/
drwxr-xr-x 1 ikegami ikegami 4096 May 25 11:11 5.26.3t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:43 5.26t -> 5.26.3t/
drwxr-xr-x 1 ikegami ikegami 4096 May 26 11:20 5.28.2t/
lrwxrwxrwx 1 ikegami ikegami    7 May 23 13:43 5.28t -> 5.28.2t/
drwxr-xr-x 1 ikegami ikegami 4096 May 23 13:44 5.30.2t/
lrwxrwxrwx 1 ikegami ikegami    7 Mar 15 17:26 5.30t -> 5.30.2t/

lrwxrwxrwx 1 ikegami ikegami    7 Mar 15 17:26 latest -> 5.30.2t/

lrwxrwxrwx 1 ikegami ikegami    7 Apr 19 22:56 acpcw -> 5.30.2t/
lrwxrwxrwx 1 ikegami ikegami    7 Apr  2 18:32 gloomhaven -> 5.30.2t/
...
Run Code Online (Sandbox Code Playgroud)
  • “t”代表“螺纹”。
  • 我为每个项目创建符号链接并在 shebang 行中使用这个符号链接。这样,我可以轻松切换perl项目使用的内容(通过更改符号链接)。perlbrew alias可用于创建这些符号链接。
  • 我为 5.##t 创建符号链接,指向该版本的最新版本,以便我可以perlbrew use 5.20t(例如)获取该版本的最新维护版本。perlbrew alias可用于创建这些符号链接。
  • 我创建了一个名为的符号链接,system以便我可以使用perlbrew use system系统 Perl。perlbrew off并且perlbrew switch-off可以代替这个现在可以用,但我还是喜欢的符号链接。

我使用以下工具来安装 Perl 的新版本:

#!/usr/bin/env perl

use strict;
use warnings;

use File::Basename qw( basename );
use Getopt::Long   qw( );


# -----


sub help {
   my $script_file = basename($0);

   print(<<"__EOI__");
Creates a perlbrew install of the specified version of Perl.
Optionally, it will also install modules from CPAN afterwards.

Usage:
   $script_file --help
   $script_file [OPTIONS] BUILD [MODULES]

Builds:
   5.x.y
   5.x.yd   Build with debug symbols (-g)
   5.x.yt   Build with thread support
   5.x.ydt  Build with debug symbols (-g) and thread support

options:
   -n       Skip tests
__EOI__
   exit(0);
}


sub usage_error {
   my $script_file = basename($0);
   print(STDERR $_[0]) if @_;
   print(STDERR "Use $script_file --help to display usage\n");
   exit(1);
}


sub parse_args {
   my $getopt = Getopt::Long::Parser->new(
      config => [qw(
         posix_default
      )],
   );

   my %opts = (
      threaded => undef,
      debug    => undef,
      no_tests => 0,
   );

   $getopt->getoptions(
      'help|h|?' => \&help,
      'n!'       => \$opts{no_tests},
   )
      or usage_error();

   @ARGV >= 1
      or usage_error("Insufficient arguments\n");

   my $build = shift(@ARGV);
   my $version = $build;
   $opts{threaded} = $version =~ s/t\z//;
   $opts{debug   } = $version =~ s/d\z//;

   $version =~ /^5\.[1-9][0-9]*\.(?:0|[1-9][0-9]*)\z/
      or usage_error("Invalid version format\n");

   return ($build, $version, \%opts, @ARGV);
}


# -----


sub systemx {
   my ($cmd, @args) = @_;
   system { $cmd } $cmd, @args;
   die("Can't run \"$cmd\": $!\n")                    if $? == -1;
   die("\"$cmd\" killed by signal ".($? & 0x7F)."\n") if $? & 0x7F;
   die("\"$cmd\" exited with error ".($? >> 8)."\n")  if $? >> 8;
}


sub perlbrew_install {
   my ($build, $version, $opts) = @_;

   my $perlbrew_root = $ENV{PERLBREW_ROOT} || "$ENV{HOME}/perl5/perlbrew";

   unlink("$perlbrew_root/build.log");

   my @args;
   push @args, "-v";
   push @args, "-n"                 if $opts->{no_tests};
   push @args, $version;
   push @args, "--as=$build";
   push @args, "-DPERL_SUB_DEPTH_WARN=1000";
   push @args, "-Doptimize=-g"      if $opts->{debug};
   push @args, "-Dusethreads"       if $opts->{threaded};

   systemx("perlbrew", "install", @args);
}


sub module_install {
   my ($build, @modules) = @_;
   return if !@modules;
   systemx('sh', '-c', 'perlbrew use "${@:1:1}" && cpan -- "${@:2}"', 'dummy', $build, @modules);
}


sub main {
   my ($build, $version, $opts, @modules) = @_;
   perlbrew_install($build, $version, $opts);
   module_install($build, @modules);
}


main(parse_args());
Run Code Online (Sandbox Code Playgroud)