Nice programing

설치된 Perl 모듈의 버전을 어떻게 찾을 수 있습니까?

nicepro 2020. 12. 27. 20:48
반응형

설치된 Perl 모듈의 버전을 어떻게 찾을 수 있습니까?


설치된 Perl 모듈의 버전을 어떻게 찾습니까?

이것은 하단에있는 답이지만 여기에서 살기에 충분히 중요하다고 생각합니다. 이러한 제안을 통해 내.bashrc

function perlmodver {
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
    " is installed.\n"' $1
}

모듈 버전을 얻으려는 이유는 무엇입니까? 프로그램 내에서이 정보가 필요합니까? 다른 작업에 전달할 번호 만 필요합니까, 아니면 가지고있는 것을 찾으려고합니까?

스위치 cpan와 함께 (perl과 함께 제공되는) 내장되어 -D있으므로 설치된 버전과 CPAN의 현재 버전을 볼 수 있습니다.

$ cpan -D 텍스트 :: CSV_XS

텍스트 :: CSV_XS
-------------------------------------------------- -----------------------
        Text :: CSV의 빠른 8 비트 클린 버전
        H / HM / HMBRAND / 텍스트 -CSV_XS-0.54.tgz
        /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm
        설치됨 : 0.32
        CPAN : 0.54 최신이 아님
        H.Merijn 브랜드 (HMBRAND)
        hmbrand@xs4all.nl

오래된 모듈을 모두 보려면 -O(대문자 O) 스위치를 사용하십시오 .

$ cpan -O
모듈 이름 로컬 CPAN
-------------------------------------------------- -----------------------
아파치 :: DB 0.1300 0.1400
Apache :: SOAP 0.0000 0.7100
Apache :: Session 1.8300 1.8700
Apache :: SizeLimit 0.0300 0.9100
Apache :: XMLRPC :: Lite 0.0000 0.7100
... 등등

설치 한 모든 모듈에 대해이를 확인하려면 -a스위치를 사용하여 자동 번들을 만드십시오.


대부분의 모듈 (특히 The CPAN의 모듈)에는 $ VERSION 변수가 있습니다.

perl -MSome::Module -le 'print $Some::Module::VERSION'

VERSION은 모든 Perl 클래스 UNIVERSAL 메서드입니다. 모듈 버전을 가져 오는 데 사용할 수 있습니다 (일반적으로 설정되어있는 경우).

다음은 모듈 이름을 한 번만 추가하면되는 한 줄입니다.

perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module

모듈에 버전 번호로 Unix 타임 스탬프와 같은 미친 것이 없으면 작동하는 덜 입력하는 트릭이 있습니다.

perl -MFoo::Bar\ 9999

번역 된 내용은

use Foo::Bar 9999;

즉, 최소 버전 9999 이상인 Foo :: Bar 버전입니다. 그리고 당신이 얻는 것은

Foo::Bar version 9999 required--this is only version 1.1.
BEGIN failed--compilation aborted.

(매트 트라우트에게서 배운 멋진 트릭)


운이 좋으면 모듈에 $ VERSION 이라는 패키지 변수가 있습니다 .

$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205

이는 모듈이 CPAN에 배포되는 데 필요하지만 내부적으로 개발 된 모듈은 다른 규칙을 따르거나 전혀 따르지 않을 수 있습니다.


답변 해 주셔서 감사합니다! bashrc에 Perl 모듈 버전을 쉽게 찾을 수있는 함수를 만들었습니다.

function perlmodver {
    perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
} 

CPAN 에서 pmtools 스크립트를 확인하십시오 . Debian (기반) 배포판을 사용하는 경우 편리한 pmtools 패키지도 있습니다. 여기에는 모듈의 버전을 알려주는 스크립트 "pmvers"가 포함됩니다. 매우 편리합니다.

게시 된 다양한 one-liners와 유사한 작업을 수행하지만 오류 처리에 대해 좀 더 현명하고 한 번에 둘 이상의 모듈 버전을 제공 할 수 있습니다.


나는 그것을보고하기 위해 작은 스크립트를 썼다 : perlver .

이것은 설치 한 모듈의 버전과 .pm 파일의 위치를 ​​알려주는 간단한 도구입니다. 또한 모듈이 성공적으로로드 될 수 있도록합니다. '-', '/'또는 '\'를 '::'로 자동 변환하므로 표준 모듈 이름 대신 경로 이름 또는 배포 이름을 사용할 수 있습니다.

모듈이 $ VERSION을 정의한다고 가정합니다. 모듈이 $ VERSION을 정의하지 않는 경우에도 .pm파일이 어디에 있는지 알려 주므로 수동으로 검사 할 수 있습니다. 한 번에 여러 모듈을 확인할 수도 있습니다.

$ perlver CPAN DBD-Pg Getopt::Long
CPAN 1.7602 is
 /usr/lib/perl5/5.8.8/CPAN.pm
DBD::Pg 1.49 is
 /usr/lib/perl5/vendor_perl/5.8.8/i686-linux/DBD/Pg.pm
Getopt::Long 2.36 is
 /usr/lib/perl5/vendor_perl/5.8.8/Getopt/Long.pm

가장 기억하기 쉽고 가장 강력한 버전 :

perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'

또한 Exporter.pm을 사용하는 모듈의 경우 다음 트릭으로이 정보를 얻을 수 있습니다.

perl -MSome::Module=99999 -ex
Some::Module version 99999 required--this is only version 1.9205 at ...

Exporter.pm을 사용하지 않는 모듈의 경우 약간 더 긴 트릭이 동일한 정보를보고합니다.

perl -e'use Some::Module 99999'
Some::Module version 99999 required--this is only version 1.9205 at ...

We have the system perl (/usr/bin/perl) in Solaris 10, and above solutions are useless. Some of them report "module.pm is not installed", some of them have no output.

Here is the code which is helpful, which can list all modules and their version.

#!/usr/bin/perl

use strict;
use ExtUtils::Installed;

my @modules;
my $installed = ExtUtils::Installed->new();

if (scalar(@ARGV) > 0) {

    @modules = @ARGV;

} else {

    @modules = $installed->modules();

}

print "Module\tVersion\n";

foreach (@modules) {

    print $_ . "\t" . $installed->version($_) . "\n";

}

You can also take a look at App::module::version

$ module-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004

ReferenceURL : https://stackoverflow.com/questions/135755/how-can-i-find-the-version-of-an-installed-perl-module

반응형