标签: perl-module

有没有办法避免将Perl版本号放入非标准位置的Perl模块的"use lib"行?

我试图将一些Perl模块安装到非标准位置,让我们调用它/non/standard/location.我用了

perl Makefile.PL PREFIX=/non/standard/location
make;make install
Run Code Online (Sandbox Code Playgroud)

安装它们.

在使用该模块的脚本中,似乎有必要指定一个包含Perl版本的长目录路径,如下所示:

#!/usr/local/bin/perl
use lib '/non/standard/location/lib/perl5/site_perl/5.8.9/';
use A::B;
Run Code Online (Sandbox Code Playgroud)

是否有任何use lib或其他声明我可以使用哪个不长且冗长,并且不包括Perl的实际版本,以便我不必返回并编辑此程序如果版本Perl的升级?

perl perl-module

3
推荐指数
1
解决办法
171
查看次数

在Perl中使用变量作为方法名称

我有一个perl脚本(简化),如下所示:

my $dh = Stats::Datahandler->new(); ### homebrew module

my %url_map = (
    '/(article|blog)/' => \$dh->articleDataHandler,
    '/video/' => \$dh->nullDataHandler,
); 
Run Code Online (Sandbox Code Playgroud)

本质上,我将循环%url_map,如果当前URL匹配一个键,我想调用该键的值指向的函数:

foreach my $key (keys %url_map) {
    if ($url =~ m{$key}) {
        $url_map{$key}($url, $visits, $idsite);
        $mapped = 1;
        last;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到的消息是:

Can't use string ("/article/") as a subroutine ref while "strict refs" in use at ./test.pl line 236.

线236恰好是线$url_map{$key}($url, $visits, $idsite);.

我过去做过类似的事情,但我通常在没有函数参数的情况下这样做,并且没有使用模块.

perl perl-module

3
推荐指数
1
解决办法
2678
查看次数

如何伪造perl模块的依赖?

我正在使用的外部Perl库有一个我不会在我的应用程序中使用的依赖项(DBD :: mysql)(DBD :: SQLite),所以我希望系统只是假装依赖存在,即使它是假的".

我可以创建一个空的DBD :: mysql.pm模块来编译或者有更简单的方法吗?

perl dependencies perl-module dbd

3
推荐指数
1
解决办法
346
查看次数

在perl传递中"使用"吗?

package AA;

package BB;
use AA;

package CC;
use BB;
Run Code Online (Sandbox Code Playgroud)

我必须放入use AACC,还是隐含的?

perl perl-module

3
推荐指数
1
解决办法
245
查看次数

Perl哈希:如何处理重复键并获得可能的对

我有这样的对(数据排序为%哈希格式(我有大数据))
G1-G2
G2-G3
D1-D2
D3-D2
G3-D3
G2-D3

Perl脚本

    use strict;
    use warnings;
    use Data::Dumper;
    my %hash;
    $hash{'G1'}='G2';
    $hash{'G2'}='G3';
    $hash{'D1'}='D2';
    $hash{'D3'}='D2';
    $hash{'G3'}='D3';
    $hash{'G2'}='D3';

    print Dumper \%hash;
Run Code Online (Sandbox Code Playgroud)

输出
$ VAR1 = {'G1'=>'G2','G2'=>'D3','D3'=>'D2','G3'=>'D3','D1'=>'D2' };

这里缺少G2-G3 bcz密钥哈希重复
我需要添加重复项(我可以使用数组但是有大数据系统会变慢)

任何快速方法添加对并获得可能对的条件输入

如果$ input ='G2'
获取输出G2 - >(G3,D3,G1)

如果$ input ='D2'
获取输出D2 - >(D1,D3)

perl hash perl-module

3
推荐指数
1
解决办法
3699
查看次数

如何在Mac OS X Mavericks上降级Perl

新发布的Mavericks已从其存储库中删除了已弃用的模块"Switch.pm".但是,我最近尝试构建AOSP源代码树,它以某种方式使用此模块生成"make-hash-tools.pl"

小牛队的perl版本为5.16.2,其前身Mountain Lion的版本为5.12.4.有没有办法降级我的Perl?

编译错误如下所示:

  Can't locate Switch.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-\ 
  multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level\
  /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2\
  /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16\
  /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level \
  /System/Library/Perl/Extras/5.16 .) at external/webkit/Source/WebCore\
  /make-hash-tools.pl line 23.
Run Code Online (Sandbox Code Playgroud)

谢谢〜!

macos perl perl-module android-source osx-mavericks

3
推荐指数
1
解决办法
4834
查看次数

使用"require"时如何导入变量?

这不起作用(下面的错误消息).我怎么能做这个工作?

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

sub routine {
    require FindBin;
    FindBin::->import( '$RealBin' );
    say $RealBin;
}

routine();
Run Code Online (Sandbox Code Playgroud)

给出这个输出

Global symbol "$RealBin" requires explicit package name at ./perl.pl line 9.
Execution of ./perl.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

variables import perl perl-module require

3
推荐指数
1
解决办法
560
查看次数

如何在perl one liner中查看由n或p开关生成的代码块

我相信我之前已经运行了这个,但是对于我的生活,我无法在perlrun或Google中找到任何参考.希望这里的一些perl boffins能够回答它.使用-ne开关运行perl one衬管时.是否有选项可以将perl编译的代码输出到控制台?

所以如果我跑:

crontab -l | perl -ne 'print if /^00/'
Run Code Online (Sandbox Code Playgroud)

然后Perl会将其编译为:

while(<>){
   print if /^00/;
}
Run Code Online (Sandbox Code Playgroud)

我确信有一种方法可以让perl吐出它将要使用的代码,包括任何开始或结束块.希望有人知道如何.

perl perl-module

3
推荐指数
1
解决办法
133
查看次数

如何将dd/mm/yyyy转换为Perl的纪元时间?

我已经搜索了几个小时的公式,将dd/mm/yyyy格式转换为纪元时间但尚未找到解决方案.

从2种不同的格式转换后,我有两个日期,现在就像这个"08011985"和"09302014".我必须将它们转换为纪元时间,以便从最早和最晚的日期获得差异,并根据传播的大小做一些事情.

我无法安装任何模块,我在5.8.8.

perl time perl-module epoch

3
推荐指数
1
解决办法
376
查看次数

XML :: Twig - 就地编辑

我试图在xdp文件的末尾附加时间戳.我在用 XML :: Twig.在运行脚本时,timestamp(<testing>4619314911532861</testing>)会在末尾添加,但输出将在STDOUT上而不是testdata.xdp.我错过了什么?

码:

#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;

my $twig=XML::Twig->new(pretty_print => 'indented');
my $file = 'testdata.xdp';
$twig->parsefile_inplace($file, '.bak');
my $root= $twig->root;
my @children= $root->children;

foreach my $child (@children){
    my $eblg= new XML::Twig::Elt( 'testing', localtime);
    $eblg->paste( 'last_child', $child);
}

$twig->flush; 
Run Code Online (Sandbox Code Playgroud)

perl perl-module xml-twig xdp-pdf

3
推荐指数
1
解决办法
143
查看次数