Nếu bạn đang sử dụng cpanm
bạn có thể buộc nó để xây dựng lại các module ở vị trí local::lib
của bạn bằng cách sử dụng các -L
và --reinstall
tắc:
list_modules | cpanm -L ~/perl5 --reinstall
nơi list_modules
là một kịch bản mà nguồn cấp dữ liệu tên của mô-đun để cpanm
(cũng có một tùy chọn -f
để cpanm
). Kịch bản này có thể giống như @ ikegami ở trên hoặc một cái gì đó như cpan-outdated
(chỉ liệt kê các mô-đun đã lỗi thời). Dưới đây là một nỗ lực hack mà hầu hết đã làm việc cho tôi gần đây (lưu ý: ikegami có thể tốt hơn) - khi nó không thành công hoặc tập lệnh cung cấp cpanm
tên mô-đun mà nó không nhận ra, cpanm
tiếp tục và dường như không làm hỏng bất kỳ thứ gì (nhưng thực hiện sao lưu):
cd $PERL_LOCAL_LIB_ROOT
perl -MFile::Find -MConfig -E'
find {
wanted => sub {
$mod = $_ if /\.pm\z/;
$mod =~ s/lib\/perl5\/auto\/.*//g;
$mod =~ s/lib\/perl5\/\Q$Config{archname}\E\/.*//g;
$mod =~ s/lib\/perl5\///g;
push @mods, $mod unless $mod =~ /^$/;
},no_chdir=>1
},"lib/perl5"; @modhash{@mods}=(); say for sort keys %modhash '
bằng cách thay đổi ở đâu và những gì File::Find
phát hiện với wanted()
bạn có thể ăn một danh sách khác nhau của mô-đun để cpanm
. Sẽ rất tuyệt nếu cpan
hoặc cpanm
có một số _method
hoặc -switch
nội bộ cho phép bạn buộc xây dựng lại local::lib
các mô-đun đã cài đặt sử dụng XS. Có một điều như vậy?
Đó là cpanm
, carton
(và nhìn thấy những công cụ node.js
npm
trong hành động) mà cảm hứng cho tôi để làm nhiều hơn local::lib
cài đặt dựa. Bây giờ CORE đi kèm với "CPAN client" mà tàu với perl (cpan
) dường như nhận được nhiều automagical và dễ dàng hơn để sử dụng là tốt. Tôi thực sự thích local::lib
vì nó cho phép bạn sử dụng hệ thống perl
nhưng quản lý ngăn xếp mô-đun của riêng bạn mà không có đặc quyền mức hệ thống. Tuy nhiên, có thể dễ dàng hơn để quản lý các thay đổi và nâng cấp nếu bạn sử dụng perlbrew
để chạy một "hệ thống không" ("địa phương") perl
. Tất nhiên bạn có thể làm điều này và vẫn còn có local::lib
, carton
vv. quản lý một thư mục hoặc ứng dụng cụ thể chồng các mô-đun.
1). Một cách khác để nâng cấp là sử dụng perllocal
để tạo danh sách các mô-đun hiện đang được cài đặt của bạn (NB Tôi không hoàn toàn chắc chắn nếu perllocal.pod
được giữ ở trạng thái đáng tin cậy/hữu ích). [Chỉnh sửa: Thực tế, perllocal
giữ lịch sử của các mô-đun đã cài đặt của bạn thay vì danh sách các mô-đun hiện tại được cài đặt. Bạn sẽ muốn lọc này hoặc bạn sẽ kết thúc cài đặt lại toàn bộ các phiên bản mô-đun sau cái khác!). Nút perlmonks này cho biết cách làm sạch perllocal.pod
: http://www.perlmonks.org/?node_id=483020 của bạn. Tôi thích giữ lịch sử. ]
Để phân tích perllocal.pod
cho đầu vào để cpanm
, tìm kiếm thông qua các tập tin và tiết kiệm các trận đấu trong một mảng, sau đó tách chúng bằng hai để tạo ra một hash từ các phần tử mảng (key,value,key,value
). Số cài đặt và số phiên bản gần đây thấp hơn trong tệp, vì vậy, bạn có thể tạo băm có tên mô-đun làm khóa và có các giá trị được cập nhật bởi các mục sau:
perl -ne 'push @arr, grep {defined}
(/\A=head2.*:\s+C<Module>\s+L<(.*)\||.*C<VERSION:\s(.*)>\Z/msx); }{
%h = map{ split/,/,$_,2 } @arr; print "$_\@$h{$_}\n" for keys %h' perllocal.pod
(NB: this check error - entries) trong perllocal.pod
đôi khi thiếu VERSION
dữ liệu và các số lẻ khác nên hãy cẩn thận.)
2). Nhưng phương thức này được so sánh với kịch bản lệnh được đề cập bởi ilmari trong # perl-help trên IRC. Nó sử dụng jq
- tiện ích dòng lệnh bạn thực sự cần phải có (bạn sẽ muốn nó sau này). Nếu bạn đã sử dụng cpanm
để cài đặt mô-đun của mình, nó sẽ tạo các tệp install.json
. Bạn có thể tận dụng điều đó để làm cho danh sách để nuôi để cpanm
cho cài đặt lại thiết lập hiện tại của bạn module:
find ~/perl5/ -name install.json -exec jq '.name + "@" + .version' {} +
Rất nhanh, rất đơn giản và bạn có thể kết hợp nó với các phương pháp cpanm
của việc sử dụng curl
để tự cài đặt để xây dựng lại mô-đun của bạn.
3). Nếu bạn sử dụng perlbrew
để quản lý cài đặt perl, bạn có thể easily copy and reinstall tất cả các mô-đun của mình từ một phiên bản perl
sang phiên bản khác.
HTH!
+1 để đề cập đến bản sao lưu :-) và ['perlbrew'] (http://www.perlbrew.pl). –
+1 để đề cập: 'được sử dụng bởi cài đặt :: lib sucks' :) – jm666
+1 @ jm666 cho hài hước –