我对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模块时遇到了麻烦,因此我可以拥有一个带有多个子模块的父模块,并且调用脚本只会加载所需的特定子模块。例如,我希望能够像这样进行方法调用:
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代码来设置每个模块,并解释如何设置文件结构,将不胜感激。如果我要完成所有尝试完成的工作都是错误的,我将对最佳方法的解释以及如何设置的示例代码表示感谢。
这是我遇到的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文件夹,是吗?
有关这个问题的任何见解?
谢谢大家的时间!
是否可以在模块的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) 我有一种情况,我需要找到一个包的调用者,我的代码看起来像:
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程序使用Net::Finger并cron.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但我无法弄清楚如何添加路径而不会导致更多错误.提前致谢.
我想得到1个像素(x=3, y=3)和(来自R改变其RGB值100到101,G从99到100,B从193至194).
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) 我已经安装了一个perl模块,比如XYZ,然后创建了一个包含许多.pm文件的文件夹.我复制了文件夹并将其放在未安装XYZ的任何其他系统中.
所以,我可以在两个系统中使用XYZ模块的方法.我的意思是,我无法找出这些方法之间的区别,但我认为必须有一些方法.我所知道的是,当我们安装perl模块时,也会安装依赖项.我对吗?谁能提到两者之间的其他差异,如果有的话?
我有一个非常庞大的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
任何人都可以建议更快更好的方法来获得所需的输出?