在我的应用程序中,我将所有模块放在一个目录中,让我们调用它 libx.由于用户可以选择部署应用程序的位置,因此我不想对lib路径进行硬编码.
所以在开始时myapp.pl,我编写了以下代码行.
#! /usr/bin/perl -w
use strict;
my $curr_dir = $0;
my $curr_lib = $curr_dir;
$curr_lib =~ s/myapp\.pl/libx/;
use $curr_lib ;
Run Code Online (Sandbox Code Playgroud)
我得到了编译错误,而不是得到我期待的东西!
那我的代码出了什么问题?我不想在使用时硬编码lib路径use lib,我该怎么做?
对不起,我忘了在部署应用程序时提及它,myapp.pl并且libx位于同一目录中.
我的部门目前正在解决一些通用代码的最佳实践,这是我们想有所加强,为开发人员提供Perl::Tidy和Perl::Critic配置.
现在我们遇到了附带评论的问题.附注是这样的:
my $counter = 0; # Reset counter
Run Code Online (Sandbox Code Playgroud)
我们宁愿根本没有侧面评论,因为在大多数情况下,它们可以写在有问题的代码之上,在那里它们更容易阅读.如果可能的话,一个Perl::Tidy解决方案将是完美的,这会将一个侧面评论移到它上面的一行,第二个最好的将是一个Perl::Critic政策(我在CPAN没有找到)和第三个最好的,最后一个将是开发人员在进行代码审查时要注意将这些意见指出.
是否可以用Perl::Tidy或实施Perl::Critic?
我正在尝试对大量字符串(蛋白质序列)执行一些基于组合的过滤.
我写了一组三个子程序来处理它,但我在两个方面遇到麻烦 - 一个是小的,一个是主要的.小麻烦是当我使用List :: MoreUtils'成对'时,我得到关于使用的警告,$a并且$b只有一次,并且它们未被初始化.但我相信我正在调用这种方法(基于CPAN的输入和网上的一些例子).
主要的麻烦是错误"Can't use string ("17/32") as HASH ref while "strict refs" in use..."
看起来这只有在foreach循环输入&comp将散列值作为字符串而不是评估除法运算时才会发生.我确定我犯了一个菜鸟错误,但无法在网上找到答案.我第一次看到perl代码是在上周三...
use List::Util;
use List::MoreUtils;
my @alphabet = (
'A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I',
'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V'
);
my $gapchr = '-';
# Takes a sequence and returns letter => occurrence count pairs as hash.
sub getcounts {
my …Run Code Online (Sandbox Code Playgroud) 我正在开发一个世界时钟网络应用程序,我想添加一个功能来记录每个位置接下来将进行DST更改的方式和时间.
我正在使用DateTime和DateTime::TimezoneCPAN模块,它们似乎提供了除此之外的所有可能的功能!DateTime::Timezone是tz/Olson数据库的实现.
到目前为止,我正在将本地偏移量与UTC进行比较,无论是现在还是提前24小时,这使我可以标记效果,但不确切地说它是什么时候发生的.
我的概念证明每分钟计算一次.我认为下一步是:
在接下来的365天内使用类似的方法创建查找表以识别受影响的日期,然后查看那些日期内的每个小时
以某种方式解析DateTime::Timezone模块中的DST规则.
有任何想法吗?我应该注意到我对Perl的了解非常基础.
看起来另一种选择可能是移植到PHP并使用DateTimeZone::getTransitions.这确实返回了所有转换的数组,但PHP 5.3.0只添加了可选timestamp_begin和timestamp_end参数来限制范围.
通常我会在课程__PACKAGE__->meta->make_immutable结束时通过编译完成一个课程.但是,我何时应该创建一个在运行时将角色组合成自身的类不可变?我是否应该这样做以获得更好的性能或者这是不兼容的make_immutable?make_immutable似乎加速了对象的实例化,但是一旦对象被实例化它会做什么吗?
例如,有些东西:
BUILD {
my $self = shift;
use Module::Load;
### Use the arguments passed in to determine roles applicable to
### this instance of the object. Load and apply roles.
for my $role ($self->_determine_roles()) {
load $role;
$role->meta->apply($self);
}
### $self is now a Class::MOP::Class::__ANON__... anonymous class
### Should I then be saying I'm done mutating it with something like this?
### can make_immutable even be run on an object instance and not …Run Code Online (Sandbox Code Playgroud) 我有一堆html文件,需要转换并将它们格式化为带有perl的文本,即类似于<br/>将要插入的文本\n
我在cpan html :: formattext上找到了这个perl模块,它很好地格式化了文本但是如果有链接它会剥离它,是否有任何选项使用HTML :: FormatText来格式化html,就像文本一样但当有这样的链接时
<a href="http://www.microsoft.com>http://www.microsoft.com</a>
Run Code Online (Sandbox Code Playgroud)
即这样的事情:
<br /><b>Microsoft</b><br /><a href="http://www.microsoft.com>`
Run Code Online (Sandbox Code Playgroud)
将被转换为:
microsoft
http://www.microsoft.com
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数组哈希:
{ $key, [$val1, $val2] }
Run Code Online (Sandbox Code Playgroud)
我正在尝试按数值排序数组的第二个值并打印出整个哈希值.我看过Schwartzian变换的帖子,但我还没有看到一个完全符合我想要的东西.我也对语法以及如何将排序后的值映射回原始{$key, [$val1, $val2] }形式感到困惑.任何帮助,将不胜感激!
我正在开发一个个人Perl模块来构建一个基本的脚本框架,并帮助我学习更多有关该语言的知识.我通过命令行工具使用ExtUtils :: ModuleMaker创建了一个名为"AWSTools :: Framework"的新模块modulemaker.我正试图找出在开发过程中测试它的适当方法.
创建的目录结构包括以下内容:
./AWSTOOLS/Framework/lib/AWSTools/Framework.pm ./AWSTOOLS/Framework/t/001_load.t
自动生成的001_load.t文件如下所示:
# -*- perl -*-
# t/001_load.t - check module loading and create testing directory
use Test::More tests => 2;
BEGIN { use_ok( 'AWSTools::Framework' ); }
my $object = AWSTools::Framework->new ();
isa_ok ($object, 'AWSTools::Framework');
Run Code Online (Sandbox Code Playgroud)
如果我尝试直接运行脚本(从命令行或在我的TextMate编辑器中),它将失败:
Can't locate AWSTools/Framework.pm in @INC....
如果我尝试prove在./AWSTOOLS/Framework目录中运行,它也会失败.
问题是:在开发Perl模块时运行测试的正确方法是什么?
将数据导入Perl 6 Native指针并不是什么大不了的事:
sub memcpy( Pointer[void] $source, Pointer[void] $destination, int32 $size ) is native { * };
my Blob $blob = Blob.new(0x22, 0x33);
my Pointer[void] $src-memcpy = nativecast(Pointer[void], $blob);
my Pointer[void] $dest-memcpy = malloc( 32 );
memcpy($src-memcpy,$dest-memcpy,2);
my Pointer[int] $inter = nativecast(Pointer[int], $dest-memcpy);
say $inter; # prints NativeCall::Types::Pointer[int]<0x4499560>
Run Code Online (Sandbox Code Playgroud)
但是,我认为没有办法让它们脱离Pointer[int]另一个而不是创建一个函数来完成它,因为它nativecast显然是在相反的方向上工作,或者至少不是在向非本地类型转换的方向(这应该是显而易见的名称).你会怎么做?
更新:例如,使用数组会使其更加可行.然而
my $inter = nativecast(CArray[int16], $dest);
.say for $inter.list;
Run Code Online (Sandbox Code Playgroud)
这有效,但会产生错误: Don't know how many elements a C array returned from a library
更新2:继克里斯托夫的回答(谢谢!)之后,我们可以对此进行更多细化,然后我们将这些值重新纳入 …