كيف يمكنني العثور على نسخة من تثبيت بيرل الوحدة ؟

StackOverflow https://stackoverflow.com/questions/135755

  •  02-07-2019
  •  | 
  •  

سؤال

كيف يمكنك العثور على نسخة من تثبيت بيرل الوحدة ؟

هذا هو الجواب في الأسفل, ولكن أعتقد أنه من المهم بما فيه الكفاية للعيش هنا.مع هذه الاقتراحات ، أنا خلق وظيفة في بلدي .bashrc

function perlmodver {
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
    " is installed.\n"' $1
}
هل كانت مفيدة؟

المحلول

لماذا تحاول الحصول على نسخة من الوحدة ؟ هل تحتاج هذه من داخل البرنامج ، هل تحتاج فقط عدد لتمرير عملية أخرى ، أو تحاول معرفة ما لديك ؟

لدي هذا صلب cpan (الذي يأتي مع بيرل) مع -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 (رأس المال س) التبديل:

$ 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 تبديل لخلق autobundle.

نصائح أخرى

معظم وحدات (وخاصة تلك التي من CPAN) وقد دولار الإصدار متغير:

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

الإصدار هو العالمي طريقة كل بيرل الطبقات.يمكنك استخدامه للحصول على إصدار الوحدة النمطية (إذا كان قد تم ضبطه التي عادة).

هنا هو واحد بطانة حيث لديك فقط لإضافة اسم وحدة مرة واحدة:

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

هناك أقل-كتابة خدعة ، أن يعمل على توفير الوحدة النمطية الخاص بك لا يكون شيء مجنون مثل Unix timestamp مثل رقم الإصدار.

perl -MFoo::Bar\ 9999

يعمل هذا لأن ما يترجم إلى هو

use Foo::Bar 9999;

أينسخة من فو::شريط هذا على الأقل نسخة 9999 أو أحدث.وما تحصل عليه

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

(خدعة تعلمتها من مات سمك السلمون المرقط.)

إذا كنت محظوظا, وحدة سوف يكون حزمة متغير اسمه $الإصدار:

$ 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" أن يقول لك وحدة الإصدار.إنه مفيد جدا.

فإنه لا شيء على غرار مختلف واحد المتشددين الناس نشر, لكنه أذكى قليلا عن معالجة الخطأ, و يمكن أن تعطيك النسخة من أكثر من وحدة واحدة في وقت واحد.

كتبت نصي صغير إلى تقرير أن: perlver.

هذا هو أداة بسيطة صغيرة يقول لك ما هو إصدار وحدة لك تثبيت ومن فيها .مساء الملف يقع.كما يضمن وحدة يمكن تحميلها بنجاح.ذلك تلقائيا بتحويل '-', '/', أو '\' إلى '::', بحيث يمكنك استخدام المسار أو توزيع اسم بدلا من الكنسي اسم الوحدة النمطية.

فإنه يفترض أن وحدة يعرف $الإصدار.إذا كانت وحدة لا تحدد بقيمة الإصدار ، لن أقول لكم أين .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;'

وبالإضافة إلى ذلك ، على الوحدات التي تستخدم مصدر.بعد الظهر, يمكنك الحصول على هذه المعلومات مع هذه الخدعة:

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

لوحدات التي لا تستخدم مصدر.مساء أطول قليلا خدعة التقارير نفس المعلومات:

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

لدينا نظام بيرل (/usr/bin/perl) في سولاريس 10, وقبل حلول غير مجدية.بعض منهم تقرير "وحدة نمطية.مساء لم يتم تثبيت" بعض منهم لديهم أي الإخراج.

هنا هو رمز وهي مفيدة التي يمكن أن قائمة جميع وحدات النسخة الخاصة.

#!/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-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top