Perl-скрипт для проверки, установлены ли Perl-модули - PullRequest
2 голосов
/ 18 февраля 2012

Я хотел бы иметь возможность запустить этот тест для каждого модуля в списке. Не уверен, как зацикливаться на каждом элементе.

use Module::Load;
eval {
  load Image::Magick;
  1;
} or die "you need Module to run this program";
  • Bit :: Vector
  • Карп :: Клан
  • Проверьте :: ISA
  • DBD :: Oracle
  • DBI
  • Данные :: GUID
  • Данные :: OptList
  • Данные :: TreeDumper
  • Data :: UUID
  • Date :: Calc
  • Devel :: Размер
  • ExtUtils :: MakeMaker
  • Вход :: отправка
  • Вход :: диспетчерский :: File :: Подвижной
  • Вход :: Отправка :: FileRotate
  • Вход :: Log4perl
  • Params :: Util
  • Params :: Validate
  • Сортировка :: Естественно
  • Sub :: экспортёр
  • Sub :: Установка
  • Sub :: Uplevel
  • Sys :: Syslog
  • Term :: Размер
  • Test :: Exception
  • Test :: Simple
  • Test :: Использование :: ОК
  • Дерево :: Simple

Ответы [ 4 ]

4 голосов
/ 18 февраля 2012

Попробуйте с:

#!/usr/bin/perl 
use 5.010;
use strict;
use warnings;

my @modules = qw(
    Bit::Vector
    Carp::Clan
    Check::ISA
    DBD::Oracle
    DBI
    Tree::Simple
);

for(@modules) {
    eval "use $_";
    if ($@) {
        warn "Not found : $_" if $@;
    } else {
        say "Found : $_";
    }
}
2 голосов
/ 18 февраля 2012

Если вам не нужно использовать Perl для этого, вы можете сделать это в сценарии оболочки:

#!/bin/sh
MODULES="Data::Dumper Foobar::Test"

for i in $MODULES ; do
  if $(perl -M$i -e '1;' >/dev/null 2>&1 ); do
    echo "Ok."
  else
    echo "No." 
  fi
done

Вы можете сделать что-то еще, кроме использования echo.

Кодовая последовательность:

perl -MData::Dumper '1;'

выйдет со значением ошибки 0 (ок) и

perl -MFoobar::Test '1;'

завершится со значением ошибки 2 (ошибка произошла).

1 голос
/ 18 февраля 2012

Я хочу повторить комментарий @ daxim о том, что, похоже, вы хотите распространить свой модуль. Для этого я бы посмотрел либо Module::Build, либо Dist::Zilla. Почти все мои модули используют один из этих двух механизмов, поэтому, если вам нужны примеры, не стесняйтесь пролистать мой GitHub . Найдите файлы Build.PL или dist.ini (для M :: B или D :: Z соответственно).

0 голосов
/ 18 августа 2014

полный скрипт

  # a around M42's answer with some more user-kindness ...
  use strict ; use warnings ; 
  use 5.10.0 ; 

  #  quick and dirty check for prerequisites perl modules:
  #  courtesy of:http://stackoverflow.com/a/9340304/65706
  #  if you have a calling bash script call by :
  #  perl "/path/to/isg_pub_preq_cheker.pl"
  #  export ret=$?
  #  test $ret -ne 0 && doExit 1 "[FATAL] perl modules not found!!!"


  # check that all the required modules are installed
  my ( $ret , $msg ) = doCheckRequiredModules();

  unless ( $ret == 0 ) {
     print "$msg" ; 
     # give some time for the user to react
     sleep 7;
  }

  exit(0);

  sub doCheckRequiredModules {

     my @modules = qw(
        ExtUtils::MakeMaker
        Test::More
        Test::Deep
        File::Copy::Recursive
        HTML::TreeBuilder
        HTML::TreeBuilder::XPath
        HTML::TableExtract
        HTML::ElementTable
        Data::Printer
     );

     for(@modules) {
         eval "use $_";
         if ($@) {

           my $msg = "\n\n\n [FATAL] did not found the following perl module: $_ " ; 
           $msg .= "\n install it in the shell by running the following command:" ; 
           # if the user knows already the difference between the running the cmd 
           # with sudo or he / she probably knows already how-to install perl modules
           $msg .= "\n sudo perl -MCPAN -e 'install $_'\n\n\n" ; 
           $msg .= "\n if you seem to be stuck in circular reference kind of loop try even :\n" ; 
           $msg .= "\n sudo perl -MCPAN -e 'CPAN::Shell->force(qw( install $_));'\n" ; 
           $msg .= "\n You may end-up now with Ctrl + C \n\n\n" ; 

           return ( 1, "$msg")  if $@;
         } else {
             say "[INFO ] == ok == check for prerequisite perl module : $_";
         }
     }

     return ( 0 , "all required modules found" ) ;   
  }
  #eof sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...