标签: perl-module

如何在Perl中指定包版本?

我对5.10.0之前的文档与最新的版本模块之间存在冲突的建议感到有些困惑. Perl最佳实践清楚地表明版本字符串('v1.0.3')是坏的,并且应该指定一个版本,如下所示:

use version; our $VERSION = qv('1.0.3');
Run Code Online (Sandbox Code Playgroud)

但版本模块说我们回到使用版本字符串:

use version 0.77; our $VERSION = qv("v1.2.3");
Run Code Online (Sandbox Code Playgroud)

我们退步了,或者这背后有原因吗?

perl perl-module version

5
推荐指数
1
解决办法
773
查看次数

设置Perl模块结构

我在弄清楚如何以一种面向对象的方式构造Perl模块时遇到了麻烦,因此我可以拥有一个带有多个子模块的父模块,并且调用脚本只会加载所需的特定子模块。例如,我希望能够像这样进行方法调用:

use Example::API;    
my $api = Example::API->new();

my $user = {};
$user->{'id'} = '12345';

$api->Authenticate();
$user->{'info'} = $api->Users->Get($user->{'id'});
$user->{'friends'} = $api->Friends->Get($user->{'id'});
Run Code Online (Sandbox Code Playgroud)

就文件结构而言,我想按如下所示设置模块,或采用任何使一切正常工作所需的结构:

api.pm
users.pm
friends.pm
...
Run Code Online (Sandbox Code Playgroud)

首先,我要这样做的原因是,如果某人只想根据API进行身份验证,则不必加载其他所有模块。同样,如果某人只想获取用户的信息,则不必加载friends.pm模块,只需加载即可users.pm。如果您能提供必要的示例Perl代码来设置每个模块,并解释如何设置文件结构,将不胜感激。如果我要完成所有尝试完成的工作都是错误的,我将对最佳方法的解释以及如何设置的示例代码表示感谢。

oop perl perl-module

5
推荐指数
1
解决办法
1734
查看次数

Perl CGI Scripts在库中找不到模块

这是我遇到的Apache/Perl问题.

我在perl CGI应用程序中使用CPAN模块.它是Spreadsheet :: ParseExcel

我已经用tar.gz文件安装了cpan模块.

我已经安装了依赖项.

但是,我确实以非root用户身份执行了此操作.包含这些文件的库位于用户文件夹/ home/user/lib下

现在,我已在此框中成功配置了Apache2.html目录是/ var/www/html,cgi文件夹是/ var/www/html/cgi-bin.我已经验证它们有效,因为该文件夹中不需要特殊模块的所有脚本都可以在我的firefox浏览器中运行,即.你好世界,数据转储,简单形式.

但是,当我尝试运行使用"Spreadsheet :: ParseExcel"的脚本时,我得到的错误是在@INC中找不到该模块.但是,我在添加库的脚本开头有一个"use lib"语句.

脚本可以在PUTTY中运行而不会出现问题.只有从浏览器运行脚本时我才会遇到问题.

这个Web应用程序写在另一个盒子上,并在该盒子上正常工作.因为我当然在那里发展.我将Apache2放在我的个人Ubuntu机器上,并在这里安装了Web应用程序和模块,它可以在我的本地机器上运行.

我已经将"chmod -R a + rx"设置为用户库文件夹,所以我认为Apache可以访问该文件夹,除非父目录的设置阻止了它?我不必在/ home/user文件夹上运行它,或者更糟的是/ home文件夹,是吗?

有关这个问题的任何见解?

谢谢大家的时间!

apache perl cgi perl-module

5
推荐指数
1
解决办法
2895
查看次数

在pod中包含常量

是否可以在模块的POD中包含常量的内容.例:

use constant DEFAULT_URL => "http://www.example.com";
...
=item B<setUrl>

Change the URL to query. Default is [contents of DEFAULT_URL here]

=cut
Run Code Online (Sandbox Code Playgroud)

perl perl-module

5
推荐指数
1
解决办法
174
查看次数

Perl继承 - 谁是父类的调用者

我有一种情况,我需要找到一个包的调用者,我的代码看起来像:

Inherited.pm:

package Inherited;
our @ISA = qw(BaseClass);
sub new {
   SUPER::new();
}
Run Code Online (Sandbox Code Playgroud)

BaseClass.pm

package BaseClass;
sub new {
  $a = caller(0);
  print $a
}
Run Code Online (Sandbox Code Playgroud)

现在我有另一个类(MyClass.pm):
MyClass.pm:

$obj = Inherited->new();  
Run Code Online (Sandbox Code Playgroud)

这打印继承.但我需要MyClass作为印刷语句.

有人可以帮我解决一下如何解决这个问题?

perl perl-module

5
推荐指数
1
解决办法
1281
查看次数

从cron.daily运行时,Perl无法找到模块

我有perl程序使用Net::Fingercron.daily在Fedora 11中成功运行.
我刚刚将服务器升级到Fedora 18,这些相同的perl程序不再从cron运行,但在以root身份登录时从命令行运行正常.
错误是:

Can't locate Net/Finger.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .)
Run Code Online (Sandbox Code Playgroud)

模块的路径是/root/perl5/lib/perl5/Net/Finger.pm但我无法弄清楚如何添加路径而不会导致更多错误.提前致谢.

perl cron perl-module

5
推荐指数
1
解决办法
5102
查看次数

我的CPAN Perl模块无法安装,该怎么办?

这是上述问题的一个典型问题,受到该答案这个问题的启发。请对其进行修改和改进。

我正在尝试使用CPAN / cpanm / CPANPLUS客户端从CPAN安装模块。但是,尝试安装时出现构建或测试错误。我该怎么办?

perl cpan perl-module

5
推荐指数
1
解决办法
2862
查看次数

如何使用Perl中的Image :: Magic增加特定像素的RGB值?

我想得到1个像素(x=3, y=3)和(来自R改变其RGB值100101,G从99100,B从193194).

在此输入图像描述

use strict;
use Image::Magick;
my $p = new Image::Magick;
   $p->Read( 'myfile.jpg' );

   my $pix = $p->GetPixel(
            width     => 1,
            height    => 1,
            x         => 3,
            y         => 3,
            map       => 'RGB',
            normalize => 0
        );

   # in $pix RGB value now? 
Run Code Online (Sandbox Code Playgroud)

如何1为所有RGB组件添加?

我可以将十进制RGB分成3个值(r,g,b)并单独递增,然后将三个R,G,B值合并为一个RGB吗?:) 我怎么做?

   $pix = .... something code here...

   # make changes
   $p->SetPixel(
            x       => 3,
            y       => 3,
            channel => …
Run Code Online (Sandbox Code Playgroud)

linux perl perl-module imagemagick

5
推荐指数
1
解决办法
280
查看次数

安装perl模块和复制整个文件夹有什么区别?

我已经安装了一个perl模块,比如XYZ,然后创建了一个包含许多.pm文件的文件夹.我复制了文件夹并将其放在未安装XYZ的任何其他系统中.

所以,我可以在两个系统中使用XYZ模块的方法.我的意思是,我无法找出这些方法之间的区别,但我认为必须有一些方法.我所知道的是,当我们安装perl模块时,也会安装依赖项.我对吗?谁能提到两者之间的其他差异,如果有的话?

perl perl-module

5
推荐指数
1
解决办法
272
查看次数

列出document元素的所有子节点

我有一个非常庞大的XML文件,我想列出文档元素的所有子节点.我正在使用下面的代码工作正常,但它需要很长时间来处理文件,它也从文档元素获取数据,这是不需要的:

use XML::Simple;
my $xml = XML::Simple->new();
my $d = $xml->XMLin("sample.xml");
my @arr = keys %$d;
print "@arr\n";
Run Code Online (Sandbox Code Playgroud)

示例XML:

    <?xml version="1.0" encoding="ISO-8859-15"?>
<document version="1.0" createdAt="2017-03-31T11:41:34">
   <TITLE>Computer Parts</TITLE>
   <PART001>
      <ITEM>Motherboard</ITEM>
      <MANUFACTURER>ASUS</MANUFACTURER>
      <MODEL>P3B-F</MODEL>
      <COST> 123.00</COST>
   </PART001>
   <PART002>
      <ITEM>Video Card</ITEM>
      <MANUFACTURER>ATI</MANUFACTURER>
      <MODEL>All-in-Wonder Pro</MODEL>
      <COST> 160.00</COST>
   </PART002>
   <PART003>
      <ITEM>Sound Card</ITEM>
      <MANUFACTURER>Creative Labs</MANUFACTURER>
      <MODEL>Sound Blaster Live</MODEL>
      <COST> 80.00</COST>
   </PART003>
   <PART004>
      <ITEM>14 inch Monitor</ITEM>
      <MANUFACTURER>LG Electronics</MANUFACTURER>
      <MODEL> 995E</MODEL>
      <COST> 290.00</COST>
   </PART004>
</document>
Run Code Online (Sandbox Code Playgroud)

预期产出:TITLE,PART001,PART002,PART003,PART004

任何人都可以建议更快更好的方法来获得所需的输出?

xml perl perl-module

5
推荐指数
2
解决办法
492
查看次数

标签 统计

perl ×10

perl-module ×10

apache ×1

cgi ×1

cpan ×1

cron ×1

imagemagick ×1

linux ×1

oop ×1

version ×1

xml ×1