문제

설치된 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 Text::CSV_XS

Text::CSV_XS
-------------------------------------------------------------------------
        Fast 8bit clean version of Text::CSV
        H/HM/HMBRAND/Text-CSV_XS-0.54.tgz
        /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm
        Installed: 0.32
        CPAN:      0.54  Not up to date
        H.Merijn Brand (HMBRAND)
        h.m.brand@xs4all.nl

모든 오래된 모듈을 보려면 -O (자본 O) 스위치 :

$ cpan -O
Module Name                                Local    CPAN
-------------------------------------------------------------------------
Apache::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
... and so on

설치 한 모든 모듈에 대해 이것을보고 싶다면 -a 자가 펀들을 만들려면 전환하십시오.

다른 팁

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

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

버전은 a입니다 만능인 모든 Perl 클래스의 방법. 모듈 버전을 얻는 데 사용할 수 있습니다 (일반적으로 설정 한 경우).

다음은 모듈 이름을 한 번만 추가 해야하는 하나의 라이너입니다.

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

모듈이 버전 번호로 유닉스 타임 스탬프와 같은 미친 짓이없는 경우 작동하는 트릭이 적습니다.

perl -MFoo::Bar\ 9999

이것은 IS로 번역하기 때문에 작동합니다

use Foo::Bar 9999;

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

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

(Matt Trout에서 배운 깔끔한 트릭.)

운이 좋으면 모듈에 이름이 지정된 패키지 변수가 있습니다. $ 버전:

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

이는 모듈이 CPAN에 배포되는 데 필요하지만 내부적으로 개발 된 모듈은 다른 컨벤션을 따라갈 수 있습니다.

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

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

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

그것은 여러 One-Liners 사람들과 비슷한 일을하지만 오류 처리에 대해 약간 더 똑똑하며 한 번에 하나 이상의 모듈 버전을 제공 할 수 있습니다.

나는 다음을보고하기 위해 작은 대본을 썼습니다. 펄버.

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

모듈이 $ 버전을 정의한다고 가정합니다. 모듈이 $ 버전을 정의하지 않으면 여전히 .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;'

또한 Expler.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 ...

우리는 Solaris 10에 시스템 Perl (/usr/bin/perl)을 가지고 있으며, 위의 솔루션은 쓸모가 없습니다. 그들 중 일부는 "module.pm이 설치되지 않았다"고보고하고 일부는 출력이 없습니다.

다음은 유용한 코드가 있으며 모든 모듈과 해당 버전을 나열 할 수 있습니다.

#!/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";

}

당신은 또한 살펴볼 수 있습니다 앱 :: module :: 버전

$ module-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top