如何找到已安装的Perl模块的版本?
这是在底部的答案,但我认为它足够重要,住在这里.有了这些建议,我在my中创建了一个函数.bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
Run Code Online (Sandbox Code Playgroud) 第一次从命令行运行cpan时,系统会提示您输入各种问题的答案.如何从一开始就以非交互方式自动化cpan并安装模块?
我已经开始使用perlbrew并安装了perl-5.12.2.
我明白我需要重新安装我的CPAN模块,所以我切换到我的新Perl版本(perlbrew switch perl-5.12.2和hash -r),验证交换机是否成功(perl -v)然后尝试安装一些模块(File::Copy::Recursive使用cpan.但是,cpan说`File :: Copy :: Recursive是最新的(0.38).
当我使用这个模块启动一个Perl脚本时,它会大喊Can't locate File/Copy/Recursive.pm in @INC ...(显示许多perl-5.12.2位置).当我切换回我的'普通'Perl(perlbrew off)时,脚本运行正常.
有什么建议?也许CPAN效果不好perlbrew?
我在Linux机器上,我没有root权限.我想通过CPAN将一些软件包安装到我的主目录中,这样当我运行Perl时,它就能看到它.
我跑了cpan,这要求一些配置选项.它要求提供一些目录,它建议~/perl"对于非root用户".尽管如此,当我尝试安装软件包时,它在make install步骤中失败了,因为我没有写入权限/usr/lib/perl5/whatever.
如何配置CPAN以便我可以将软件包安装到我的主目录中?
在我尝试的大多数Linux发行版中,一些Perl模块可以通过包管理器获得.其他人当然不是.很长一段时间,每当我需要安装一些CPAN模块以确定软件包是否可用时,我会使用我的软件包管理器,并在需要时安装它.
显而易见的优点是,只要有新版本的软件包,就可以更新模块.
但是,如果模块没有预先打包的形式,并且该模块存在依赖关系,则会遇到麻烦.每次cpan shell询问是否应该遵循依赖关系时,启动你的包管理器都会非常累人.
通常,另一个缺点是预封装模块的版本.如果您正在运行Debian或Ubuntu,您很快就会发现,您将无法像最近的CPAN模块作者那样生活在最前沿.
Linux上的其他Perl人如何处理这个问题?你只是忽略你的包经理提供的东西吗?是否有任何工具可以使apt(例如)和cpan更好的队友?或者你只是不通过cpan shell安装任何东西?
这是我的情况:我对Perl几乎一无所知,但它是移植机器上唯一可用的语言.我只有权在我的本地工作区写入,而不是Perl安装位置.我需要使用CPAN 的Parallel :: ForkManager Perl模块
如何在不进行集中安装的情况下使用此Parallel :: ForkManager?是否有我可以设置的环境变量,因此它位于?
谢谢
JD
我已经阅读了模块上的perldoc,但是我没有看到有关命名包的建议,因此它不会与内置或CPAN模块/包名冲突.
过去,为了开发本地Session.pm模块,我使用我公司的名称创建了一个本地目录,例如:
package Company::Session;
Run Code Online (Sandbox Code Playgroud)
...和Session.pm可以在目录Company /中找到.
但我不是这个命名惯例的粉丝.我宁愿将包层次结构命名为更接近代码的功能.但这就是CPAN一般的做法......
我觉得我错过了一些基本的东西.我也看过达米安的Perl最佳实践,但我可能没有找到正确的地方......
有关避免包命名空间冲突的任何建议吗?
更新W /相关的问题:如果是一个包名称冲突,如何Perl的选择使用哪一个?感谢大家.
我希望另一个开发人员运行我编写的Perl脚本.该脚本使用许多必须在脚本运行之前安装的CPAN模块.是否可以使脚本(或perl二进制文件)转储所有缺少的模块的列表?当我尝试运行脚本时,Perl会打印出缺少的模块的名称,但这很详细,并且不会立即列出所有缺少的模块.我想做点什么:
$ cpan -i `said-script --list-deps`
Run Code Online (Sandbox Code Playgroud)
甚至:
$ list-deps said-script > required-modules # on my machine
$ cpan -i `cat required-modules` # on his machine
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?这不是一个显示阻止,但我想让其他开发人员的生活更轻松.(所需的模块分散在几个文件中,因此我不容易手工制作列表而不会遗漏任何内容.我知道PAR,但对于我想要的东西来说似乎有点太复杂了.)
更新:谢谢,曼尼,这样做.我不知道%INC,我只知道@INC.我解决了这样的事情:
print join("\n", map { s|/|::|g; s|\.pm$||; $_ } keys %INC);
Run Code Online (Sandbox Code Playgroud)
打印出来:
Moose::Meta::TypeConstraint::Registry
Moose::Meta::Role::Application::ToClass
Class::C3
List::Util
Imager::Color
…
Run Code Online (Sandbox Code Playgroud)
看起来这样可行.
有没有其他方法可以调试Perl Data::Dumper和perl -d?
现在,我有自己的自己开发的测试工具/目录结构/支持doc strucure /我的库分发工具.然而,阅读博客文章写你的代码就像CPAN一样,这听起来是个好主意.然后它发生在我身上,我真的不知道该怎么做.
有什么好的资源可以开始在类似CPAN的结构中制作自己的Perl包?
cpan ×10
perl ×10
module ×6
version ×2
debugging ×1
dependencies ×1
distribution ×1
install ×1
installation ×1
linux ×1
packages ×1
perlbrew ×1
permissions ×1