我试图将一些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脚本(简化),如下所示:
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库有一个我不会在我的应用程序中使用的依赖项(DBD :: mysql)(DBD :: SQLite),所以我希望系统只是假装依赖存在,即使它是假的".
我可以创建一个空的DBD :: mysql.pm模块来编译或者有更简单的方法吗?
package AA;
package BB;
use AA;
package CC;
use BB;
Run Code Online (Sandbox Code Playgroud)
我必须放入use AACC,还是隐含的?
我有这样的对(数据排序为%哈希格式(我有大数据))
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)
新发布的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)
谢谢〜!
这不起作用(下面的错误消息).我怎么能做这个工作?
#!/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) 我相信我之前已经运行了这个,但是对于我的生活,我无法在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吐出它将要使用的代码,包括任何开始或结束块.希望有人知道如何.
我已经搜索了几个小时的公式,将dd/mm/yyyy格式转换为纪元时间但尚未找到解决方案.
从2种不同的格式转换后,我有两个日期,现在就像这个"08011985"和"09302014".我必须将它们转换为纪元时间,以便从最早和最晚的日期获得差异,并根据传播的大小做一些事情.
我无法安装任何模块,我在5.8.8.
我试图在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)