使用App :: Fatpacker使用Log :: Log4perl是否可以使用fatpack脚本?

时间:2015-07-09 13:39:53

标签: perl logging perl-module

我尝试使用来自App :: Fatpacker模块的fatpack实用程序(在运行Perl 5.20的CentOS 6.6 64位上)对我的Perl脚本进行fatpack。我的脚本使用Log :: Log4perl模块进行日志记录。 fatpack实用程序抱怨记录模块:

fatpack trace collect_genomes_to_database.pl
collect_genomes_to_database.pl syntax OK
fatpack packlists-for `cat fatpacker.trace` >packlists
Can't locate object method "new" via package "Log::Log4perl::Appender" at ~/perl5/lib/perl5/Log/Log4perl/Logger.pm line 33.
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8.
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8.
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9.
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9.
Compilation failed in require at ~/perl5/lib/perl5/App/FatPacker.pm line 149.
BEGIN failed--compilation aborted at ~/perl5/bin/fatpack line 3.

有人成功打包包含Log :: Log4perl的脚本还是不可行?

你能否建议一些制作自包含脚本的其他方法?

2 个答案:

答案 0 :(得分:5)

found a bug in Log4perl

解决问题的一种方法是在其余部分之前显式加载Log4perl。

PERL5OPT='-mLog::Log4perl' fatpack ...

这应该可以解决问题,使事情有效。

提示mstirc.perl.org#toolchain

答案 1 :(得分:4)

docs of App::FatPacker表示最好通过irc.perl.org上的#toolchain提供支持。我冒昧地在那里分享这个问题。

以下是删除了无关内容的对话日志。

  

[16:02:15]< simbabque> mst:关于fatpacker的有趣问题Is it possible to fatpack script using Log::Log4perl using App::Fatpacker?
  [16:15:47]< mst> simbabque:不是真的,用户没有使用他们的大脑,Mithaldu已经解决了问题:)   [16:15:47]< Mithaldu> \ O /
  [16:16:08]< Mithaldu>主要问题:用户使用旧的perl,不告诉他们加载模块
  [16:16:50]< mst>嗯,实际上,这似乎是命令列表 - 用于命令
  [16:16:51]< mst> simbabque:等一下   [16:16:53]< mst>我操我   [16:17:14]< mst>这可能是一个l4p的bug   [16:17:31]< mst> simbabque:ooooh
  [16:18:02]< mst>我认为   [16:18:24]< mst> Log :: Log4perl :: Appender正在加载:: Config,它正在加载:: Logger ...然后在定义方法之前尝试 - > new on :: Appender   [16:18:49]< mst>因此,为什么包装清单正在试图要求模块   [16:19:29]< Mithaldu>听起来各种各样的不愉快   [16:21:00]< mst>或者他错过了一大堆错误   [16:21:23]< simbabque>他错过了一些听起来很可能的事情   [16:21:28]< mst>啊,不,它是在做一个要求,我是对的,L4p是性交的   [16:21:32]< mst> 149是'要求$ t;'   [16:21:42]< mst>这是l4p中的循环要求问题   [16:22:57]< Mithaldu>所以他必须要%INC munge?
  [16:24:25]< mst>或者有人应该用棍子击打MSCHILLI并将其固定   [16:27:13]< mst> BINGO
  [16:27:17]< mst> perl -e'使用Log :: Log4perl :: Appender;'
  [16:27:19]< mst> BOOM
  [16:30:15]< mst> https://github.com/mschilli/log4perl/issues/59
  [16:30:16]< dipsy> [通知要求引起爆炸·问题#59·mschilli / log4perl·GitHub]
  [16:30:22]< mst>有人可以把它推到SO上   [16:30:35]< Mithaldu>确保
  [16:33:44]< kentnl>我想你可以通过在“Tree”阶段之后避免packlists中的问题模块并手动复制它来解决这个问题。但我在这里做得不多   [16:34:11]< mst> PERL5OPT =' - mLog :: Log4perl'脂肪包...
  [16:34:13] - * - 以太看到riche已经离开:/
  [16:34:14]< mst>可能会工作   [16:34:26]< mst>是的

正如Kent Fredric已发布的那样,解决方法是

$ PERL5OPT='-mLog::Log4perl' fatpack collect_genomes_to_database.pl

......但他发布的速度更快。

这就是Perl社区的工作。 :)