linux perl占用大量资源_linux - 在使用包管理器时,如何管理Perl模块? - 堆栈内存溢出...

为了开发,我安装了自己的Perl并将系统保留在Perl中。 如果我想升级系统Perl,我使用系统包管理器。 对于我的开发Perl,我使用cpan工具。

由于我将这些分开,我不应该把系统所需的Perl搞砸到维护任务等等,但我不必依赖系统的开发决策。

安装单独的Perls非常容易。 从源代码分发中运行Configure时,它会询问您要在何处安装所有内容。 给它任何你喜欢的路径。 例如,我在/ usr / local / perls中安装了许多Perls,并且每个安装的所有内容都是分开的。 然后我在/ usr / local / bin中为它们创建符号链接(例如perl5.8.9,perl.5.10.0,perl5.10.0-threaded)。 当我需要特定版本时,我只使用我想要的版本:

$ perl5.10.0 program.pl

特定的二进制文件确保程序选择正确的模块搜索路径等等(这与该二进制文件的Config.pm模块中的内容相同)。

这是我用来创建符号链接的脚本。 它查看bin目录,找出Perl版本,并生成类似cpan5.10.1等链接。 每个程序都知道要调用的perl权限:

#!perl

use 5.010;

use strict;

use warnings;

use File::Basename;

use File::Spec::Functions;

my $perls_directory = catfile(

$ARGV[0] // '/usr/local/perls',

'perl*'

);

die "$perls_directory does not exist!\n"

unless -d dirname $perls_directory;

my $links_directory = $ARGV[1] // catfile( $ENV{HOME}, 'bin' ); #/

die "$links_directory does not exist!\n" unless -d $links_directory;

foreach my $directory ( glob( $perls_directory ) )

{

say "Processing $directory...";

unless( -e catfile( $directory, 'bin' ) )

{

say "\tNo bin/ directory. Skipping!";

next;

}

my @perls = glob( catfile( $directory, qw( bin perl5* ) ) );

my( $perl_version ) = $perls[0] =~ m/(5\.\d+\.\d+)\z/;

say "\tperl version is $perl_version";

foreach my $bin ( glob( catfile( $directory, 'bin', '*' ) ) )

{

say "\tFound $bin";

my $basename = basename( $bin );

my $link_basename = do {

if( $basename =~ m/5\.\d+\.\d+\z/) { $basename }

else { "$basename$perl_version" }

};

my $link = catfile( $links_directory, $link_basename );

next if -e $link;

say "\t\tlinking $bin => $link";

symlink $bin => $link or

warn "\t\tCould not create symlink [$!]: $bin => $link!";

}

}

所有东西都安装在特定Perl的正确位置。

我一直在想我应该将这些Perl目录置于某种源代码控制之下。 如果我添加一个我不喜欢的模块,我只需要回到早期版本。 我只是开始这样做,并没有玩过多少。

我在Effective Perler博客中写了更多关于此类事情的文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值