标签: perl-module

如何判断机器上特定Perl安装最初提供的模块?

如何判断机器上特定Perl安装最初提供的模块?

(这不是重复: 如何判断Perl模块是核心还是标准安装的一部分? ("我怎么知道Perl模块是核心还是标准安装的一部分?") - 它在事实上是一个衍生问题)

我正在寻找最初安装的内容,作为安装的一部分提供了哪些模块,内置的内容.不是从那以后安装的.

我希望这适用于任何 Perl版本.

我希望能够这样做:

  • 在具有安装的机器上使用Perl程序本身/命令中的脚本.因此,我将依靠安装以某种形式记录它最初的内容.
  • 在我安装之前在下载的包上.问它有什么模块.

我想这样做的原因是:

  • 我想知道在编写使用Perl安装的机器上运行的软件时我可以期望哪些模块是默认模块,以及我需要添加哪些模块不是默认模块
  • 如果我保留原始安装程序映像/包或者知道如何在线再次获取确切的东西,那么我有几个机器的可重复的一致Perl安装,知道将存在哪些模块以及哪些模块不存在.
  • 我的Perl软件将有一个定义明确的部署程序,因为很容易准确定义软件所需的内容
  • 由于我的组织中存在的策略,我可能无法轻松更新/升级Perl版本(这就是它的方式,我不想对此进行侧面讨论).这样的政策是合理的,因为总是有风险升级到可以超过收益的新软件.因此,开发人员需要知道他们可以获得什么.

我之所以提出这个问题,是因为,对于任何Perl版本,似乎没有一种自动方式来查找整体标准安装,从而定义您的机器上的默认安装中可能存在哪些模块 - 请参阅问题: 如何判断Perl模块是核心还是标准安装的一部分? ("如何判断Perl模块是核心还是标准安装的一部分?")

不能依赖Perl版本来告诉您哪些模块存在与否.当然,可能有在线文档告诉你.但是我需要在我下载/安装的版本上自动执行此操作.即使是不同Linux/Unix发行版上的相同Perl版本也可能不同.

deployment perl perl-module

7
推荐指数
2
解决办法
1710
查看次数

获取并特别设置Perl模块的全局变量是否合适?

我想知道Perl的最佳实践是关于获取 - 或者更重要的是设置 - 某个模块的全局变量,通过直接访问$Module::varName以防模块没有为它提供getter/setter方法.

它闻起来不好的原因是它有点绕过封装.仅仅因为我可以在Perl中完成它,我不完全确定我应该(假设实际上有一个替代方法,比如在模块中添加一个getter/setter).

perl encapsulation coding-style perl-module

7
推荐指数
1
解决办法
1094
查看次数

如何在perl脚本中使用perl模块的某个版本(或更高版本)?

我正在使用Term::ANSIColor我的Perl脚本对终端输出进行着色,并且我正在使用该colorstrip函数,该函数仅在Term::ANSIColor版本2.01中添加,根据更改日志.那么,有没有办法让我的脚本自动die使用适当的错误消息,如果它至少找不到该版本的Term::ANSIcolor

perl perl-module version

7
推荐指数
2
解决办法
4884
查看次数

如何手动安装XS模块?

如果我错了,请纠正我,但基于XS和Dynaloader的模块是那些使用C/C++共享对象(.so)而不是PP(Pure Perl)的模块?

现在假设我有一台机器,它没有任何网络连接(Solaris 10),我想要安装Crypt::OpenSSL::AES(基于XS的模块),将AES.pm文件复制到@INC中的相关路径不会有任何好处,因为我的系统没有libssl安装.

我的第二个也是最重要的问题是,当我没有CPAN时如何安装这些模块?我的方法是:

  1. 首先得到libssl我的平台,编译它,但我应该在哪里放置该分片对象文件,以便perl可以找到它?
  2. 当我安装和编译libssl并找到它应该的位置时,现在只需将其复制AES.pm到@INC中的相关路径,还是需要配置/制作它?

perl module perl-module xs

7
推荐指数
2
解决办法
1252
查看次数

如何解压缩STDIN文件句柄的副本?

我试图找出如何让Perl模块顺从并打开文件句柄的引用.当你看到主程序时,你会理解我的意思:

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

use lib '/usr/local/share/custom_pm';
use Read_FQ;

# open the STDIN filehandle and make a copy of it for (safe handling)
open(FILECOPY, "<&STDIN") or die "Couldn't duplicate STDIN: $!";

# filehandle ref
my $FH_ref = \*FILECOPY;

# pass a reference of the filehandle copy to the module's subroutine
# the value the perl module returns gets stored in $value
my $value = {Read_FQ::read_fq($FH_ref)};

# do something with $value
Run Code Online (Sandbox Code Playgroud)

基本上,我希望主程序通过STDIN接收输入,复制STDIN文件句柄(用于安全处理),然后将对该副本的引用传递给Read_FQ.pm文件(perl模块)中的read_fq()子例程.然后,子例程将从该文件句柄读取输入,处理它并返回一个值.这里是Read_FQ.pm文件:

package Read_FQ;

sub read_fq{
my ($filehandle) = …
Run Code Online (Sandbox Code Playgroud)

perl stdin reference perl-module filehandle

7
推荐指数
1
解决办法
2696
查看次数

Perl:动态模块加载,对象继承和"常见帮助文件"

简而言之,我尝试使用网络中每个实例的对象为网络拓扑建模.另外,我有一个顶级经理类,负责管理这些对象并执行完整性检查.文件结构看起来像这样(我遗漏了大多数对象文件,因为它们的结构都非常相似):

Manager.pm
Constants.pm
Classes/
  +- Machine.pm
  +- Node.pm
  +- Object.pm
  +- Switch.pm
Run Code Online (Sandbox Code Playgroud)

在OOP中花了几年时间,我是代码重用等的粉丝所以我在thos对象之间建立了继承,继承树(在这个例子中)看起来像这样:

Switch  -+-> Node -+-> Object
Machine -+
Run Code Online (Sandbox Code Playgroud)

所有这些对象的结构都是这样的:

package Switch;
use parent qw(Node);

sub buildFromXML {
  ...
}
sub new {
  ...
}

# additonal methods
Run Code Online (Sandbox Code Playgroud)

现在有趣的部分:

问题1

如何在不静态输入名称的情况下确保正确加载所有这些对象?根本问题是:如果我require "$_" foreach glob("./Classes/*");得到很多"Subroutine new redefined at"错误.我也打得四处use parent qw(-norequire Object),Module::Find以及其他一些@INC以各种组合的修改,使之短:它没有工作.目前我正在静态导入所有使用过的类,它们会自动导入它们的父类.
基本上我要问的是:(perl-)这样做的正确方法是什么?
高级:能够创建更复杂的文件夹结构(因为会有很多对象)并且仍然具有继承+"自动加载"将非常有帮助

问题2 - 已解决

我如何"分享我的进口"?我用几个图书馆(我自己的,包含了一些辅助功能,LibXML,Scalar::Util等),我想分享他们当中我的对象.(其背后的原因是,我可能需要为所有对象添加另一个公共库,并且很可能会有超过100个对象 - 没有乐趣手动编辑所有这些对象并且使用正则表达式/脚本执行此操作理论上可以工作但是这似乎不是最干净的解决方案)
我尝试了什么:

  • 导入所有内容Manager.pm- >在Manager包中的Works - 给我一些错误,如"未定义的子程序和Switch :: …

oop perl inheritance perl-module autoload

7
推荐指数
1
解决办法
1303
查看次数

什么是"我的($ self,%myInputs)= @_;" 意思?

我在perl模块中经常遇到过这一行,但我无法弄清楚这究竟意味着什么.

my ($self, %myInputs) = @_;
Run Code Online (Sandbox Code Playgroud)

请向我解释声明,以便我可以继续.

perl perl-module

7
推荐指数
2
解决办法
5107
查看次数

我如何'使用'perl CPAN模块的特定版本?

我有很多perl代码在测试和生产中做了不同的事情,我想将我的代码锁定到CPAN模块的特定版本,以防将来某些版本的某些更改可能会破坏我的代码.

所以我想使用我使用的所有模块的特定版本.用我的意思是

use XML::Smart 
Run Code Online (Sandbox Code Playgroud)

perl cpan perl-module

7
推荐指数
1
解决办法
3282
查看次数

我应该将核心模块放在Makefile.PL的PREREQ_PM部分吗?

我应该只将非核心模块放在Makefile.PL的PREREQ_PM部分中,还是应该将核心模块放在那里?

perl makefile perl-module prerequisites

7
推荐指数
1
解决办法
316
查看次数

将perl从5.6升级到5.24

我们目前在我们的组织中使用5.6版本的perl,以及MySQL和Apache,但现在客户端希望将perl升级到v5.24.

在开始升级之前,必须记住哪些主要变化和关键点?

我冲浪了很多但是从5.6到5.24没有找到任何有趣的东西.

是否可以从这么低的版本升级到高级版本.

perl upgrade perl-module mod-perl2

7
推荐指数
2
解决办法
2172
查看次数