标签: cpan

在Perl脚本中分离配置数据和脚本逻辑

我发现在我的Perl脚本中重复了以下反模式:脚本包含一些特定于机器/设置的设置,我将其作为常量存储在脚本中,而脚本的其余部分本质上是通用的:

#!/usr/bin/perl

use strict;
use warnings;

# machine specific settings at the start of the script.
my $SETTING_1 = "foo";
my @SETTING_2 = ("123", "456");
my $SETTING_3 = "something";

# general part of script follows.
...
Run Code Online (Sandbox Code Playgroud)

在一台机器上运行时,这种模式有点好,但是一旦我想将脚本分发到多台机器上就会出现问题,因为我必须跟踪,因此我不会在常规部分中使用新的更新覆盖设置部分.

正确的解决方案显然是拥有一个通用脚本文件,并让它读取一个特定于脚本运行环境的配置文件.

我的问题是:您建议使用哪种CPAN模块来解决此问题?为什么?

perl configuration cpan configuration-files

9
推荐指数
2
解决办法
1648
查看次数

Mac OS X中有两个版本的Perl?

我已经在我的MacBook Pro上通过CPAN安装了模板模块,它似乎安装正确.

但是,当我尝试运行包含模块模块的脚本时,我得到以下内容:

无法在@INC中找到Template.pm(@INC包含:/ Users/purinkle/Sites/rob/modules /Library/Perl/Updates/5.10.0/darwin-thread-multi-2level/Library/Perl/Updates/5.10.0 /System/Library/Perl/5.10.0/darwin-thread-multi-2level /System/Library/Perl/5.10.0/Library/Perl/5.10.0/darwin-thread-multi-2level/Library/Perl/5.10.0 /Network/Library/Perl/5.10.0/darwin-thread-multi-2level /Network/Library/Perl/5.10.0/Network/Library/Perl/System/Library/Perl/Extras/5.10. 0/darwin-thread-multi-2level /System/Library/Perl/Extras/5.10.0.)at ./index.pl第12行.

BEGIN失败 - 编译在./index.pl第12行中止.

然后我认为在安装过程中出现问题并尝试通过CPAN再次安装但收到以下消息:

模板是最新的(2.22).

然后我运行了instmodsh命令来尝试找到模块的安装位置.instmodsh列出了这些目录:

/选择/ local/bin目录

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Manual

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Namespace

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Plugin

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Stash

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Tools

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/Template/Tutorial

/opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/Template/Stash/XS

/选择/本地/共享/人/ MAN1

/选择/本地/共享/人/ man3

看起来我有一些如何安装两个不同版本的Perl(5.8.9和5.10.0),这导致CPAN和其他Perl脚本之间的混淆.

如何验证此问题以及如何解决此问题?

我已经运行了命令

which perl
which cpan
Run Code Online (Sandbox Code Playgroud)

他们都返回/ opt/local/bin

运行

find / -name perl
Run Code Online (Sandbox Code Playgroud)

回报

find:/ dev/fd/3:不是目录

find:/ dev/fd/4:不是目录

/选择/ local/bin中/ perl的

/opt/local/etc/bash_completion.d/perl

/opt/local/var/macports/software/bash-completion/1.2_0/opt/local/etc/bash_completion.d/perl

/opt/local/var/macports/software/perl5.8/5.8.9_3/opt/local/bin/perl

/opt/local/var/macports/sources/rsync.macports.org/release/ports/perl

在/ usr/bin中/ perl的

在/ usr/local/bin中/ perl的

在/ usr /共享/文件/魔法/ perl的

find / -name cpan
Run Code Online (Sandbox Code Playgroud)

回报

/选择/ local/bin目录/ CPAN

/opt/local/var/macports/software/perl5.8/5.8.9_3/opt/local/bin/cpan …

macos perl templates cpan osx-snow-leopard

9
推荐指数
1
解决办法
2万
查看次数

我怎样才能找到在CPAN中使用某些模块的文件?

CPAN上的一些模块有很好的文档记录,其他模块也不是很多,但通常很容易辨别出如何通过现有技术使用模块(例如使用你想要使用的模块的模块/测试).我想知道找到使用您想要使用的代码的代码的最佳方法是什么.

我想使用(也许?)Dist::Zilla::App::Tester某些东西,但作者选择不写任何关于如何使用它的文档,有些我想知道找到已经使用它的代码的阻力最小的路径.

请不要回答这个模块

给一个人一条鱼; 你今天喂他了.教一个人钓鱼; 你已经喂了他一辈子了

perl cpan

9
推荐指数
2
解决办法
118
查看次数

在Perl中,"make test"更加冗长

当我make test使用CPAN模块具有的常规测试工具运行时,它将只输出一个简短的摘要(如果一切顺利).

t/000_basic.t .......................... ok   
t/001_db_handle.t ...................... ok     
t/002_dr_handle.t ...................... ok     
t/003_db_can_connect.t ................. ok   
... snip ...
All tests successful.
Files=30, Tests=606,  2 wallclock secs 
Result: PASS
Run Code Online (Sandbox Code Playgroud)

如果我单独运行测试,它们会输出更详细的信息.

1..7
ok 1 - use DBIx::ProcedureCall::PostgreSQL;
ok 2 - simple call to current_time
ok 3 - call to power() with positional parameters
ok 4 - call to power() using the run() interface
ok 5 - call to setseed with a named parameter
ok 6 - call a table function
ok …
Run Code Online (Sandbox Code Playgroud)

perl automated-tests cpan

9
推荐指数
2
解决办法
4089
查看次数

在Perl中配置文件处理

CPAN上的Config :: Namespace中有很多模块,但它们都是以有限的方式限制的.

我目前正在使用Config :: Std,这在大多数情况下很好,但是它会使某些事情变得困难:

  • 两个以上级别的嵌套指令
  • 处理每个键的多个值
  • conf.d目录,即多个配置文件,它们合并为一个大配置哈希

解析配置后,Config :: Std会生成一个受祝福的hashref,因此我的所有应用程序都被编码为使用hashref进行配置.我不想改变它.

我正在寻找的是一个通用,轻量级的配置模块,它产生一个hashref.

我的问题是:我应该考虑更换Config :: Std的哪些配置模块?

perl cpan config

9
推荐指数
2
解决办法
1496
查看次数

分发中的每个Perl模块是否都需要具有版本号?

我正在维护一个包含超过100个.pm文件的CPAN发行版.他们每个人都需要有一个$ VERSION,还是可以将它包含在主模块中?

对于发行版中的其他模块,包括或不包括$ VERSION有什么影响?

如果它与问题相关,那么人们应该只是"使用" - 这个分布中的主要模块.并且,出于这个问题的目的,我不是在询问它应该如何在任何文件中指定,只是它是否以任何形式存在.

perl cpan perl-module

9
推荐指数
1
解决办法
186
查看次数

无法在/usC/share/perl/5.14/CPAN/FirstTime.pm找到@INC中的local/lib.pm

我试图在我的系统上第一次使用Perl,这是Ubuntu 12.04.我安装了Perl v.5.14.2.
我查找了如何安装Perl模块,所以我开始如下:

$ perl -MCPAN -e shell
Run Code Online (Sandbox Code Playgroud)

该向导开始配置环境,如下所示:http://pastebin.com/5hn8vkb5
尽管如此,它在中间停止并显示以下错误消息:

...

Checksum for /home/john/.cpan/sources/authors/id/A/AP/APEIRON/local-lib-1.008009.tar.gz ok
---- Unsatisfied dependencies detected during ----
----     APEIRON/local-lib-1.008009.tar.gz    ----
    ExtUtils::MakeMaker [build_requires]
Running make test
  Make had some problems, won't test
  Delayed until after prerequisites
Running make install
  Make had some problems, won't install
  Delayed until after prerequisites

Can't locate local/lib.pm in @INC (@INC contains:
    /home/john/perl5/lib/perl5
    /etc/perl
    /usr/local/lib/perl/5.14.2
    /usr/local/share/perl/5.14.2
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.14
    /usr/share/perl/5.14
    /usr/local/lib/site_perl
    /home/john/Desktop)
at /usr/share/perl/5.14/CPAN/FirstTime.pm line …
Run Code Online (Sandbox Code Playgroud)

perl cpan perl-module ubuntu-12.04

9
推荐指数
1
解决办法
4万
查看次数

CPAN首次启动配置

我正在考虑将Perl作为初学者.我想尝试一些CPAN模块.当我在我的Osx控制台上运行安装命令时,CPAN会要求使用以下语句进行配置:

要安装模块,您需要配置本地Perl库目录或升级您的权限.CPAN可以通过引导local :: lib模块或将自身配置为使用"sudo"(如果可用)来帮助您.如果您需要自定义设置,也可以手动解决此问题.

你想要什么方法?(选择'local :: lib','sudo'或'manual')

local::libsudo选项有什么区别?如果我理解得很好,它会在我的计算机上本地安装一些模块.但我没有看到上面两个配置之间有任何区别.

perl cpan

9
推荐指数
1
解决办法
4980
查看次数

CPAN要求文件

使用pip,您可以创建需求文件以指定要安装的库.是否有使用CPAN的perl模块的等效项?

我遇到了ExtUtils :: MakeMaker,但这看起来像make文件专门用于每个模块.

我想尝试更好地了解我所问的是否有办法做某事

cpan install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

然后指定要在该需求文件中安装的模块.

提前致谢!

perl cpan requirements.txt cpanm

9
推荐指数
2
解决办法
1317
查看次数

CPAN在哪里安装模块?

我找不到CPAN安装文件的权威/全面描述.我假设必须有一组规则并且它不像"XYZ目录"那么简单,因为,例如,Linux盒子上的多个用户可以运行CPAN,即使有一个Perl安装并且它仍然以某种方式工作.那么,那些规则是什么?

这个问题的第二部分:PERL5LIB环境变量的文档说它是"在查看标准库和当前目录之前查找Perl库文件的目录列表."

我假设CPAN没有安装到标准库位置,因为可能是针对特定Perl版本修复的.那么CPAN可能会安装到PERL5LIB中吗?

最后,正如我已经提到的,CPAN如何处理多个用户可能正在运行相同的Perl安装的事实?对不起,如果这是一个单独的问题,但似乎可能相关.

perl cpan

9
推荐指数
2
解决办法
5923
查看次数