小编Bra*_*ert的帖子

如何跳转到Perl中的特定输入行?

我想跳到包含"include"的第一行.

<> until /include/;
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

perl loops

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

为什么"使用lib"不会以这种方式生效?

在我的应用程序中,我将所有模块放在一个目录中,让我们调用它 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

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

我们如何使用Perl :: Tidy或Perl :: Critic来收集旁注?

我的部门目前正在解决一些通用代码的最佳实践,这是我们想有所加强,为开发人员提供Perl::TidyPerl::Critic配置.

现在我们遇到了附带评论的问题.附注是这样的:

my $counter = 0;  # Reset counter
Run Code Online (Sandbox Code Playgroud)

我们宁愿根本没有侧面评论,因为在大多数情况下,它们可以写在有问题的代码之上,在那里它们更容易阅读.如果可能的话,一个Perl::Tidy解决方案将是完美的,这会将一个侧面评论移到它上面的一行,第二个最好的将是一个Perl::Critic政策(我在CPAN没有找到)和第三个最好的,最后一个将是开发人员在进行代码审查时要注意将这些意见指出.

是否可以用Perl::Tidy或实施Perl::Critic

perl comments perl-critic perl-tidy

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

为什么将此语句视为字符串而不是结果?

我正在尝试对大量字符串(蛋白质序列)执行一些基于组合的过滤.
我写了一组三个子程序来处理它,但我在两个方面遇到麻烦 - 一个是小的,一个是主要的.小麻烦是当我使用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)

regex string perl

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

我应该如何确定Perl中时区的下一个夏令时(DST)转换?

我正在开发一个世界时钟网络应用程序,我想添加一个功能来记录每个位置接下来将进行DST更改的方式和时间.

我正在使用DateTimeDateTime::TimezoneCPAN模块,它们似乎提供了除此之外的所有可能的功能!DateTime::Timezone是tz/Olson数据库的实现.

到目前为止,我正在将本地偏移量与UTC进行比较,无论是现在还是提前24小时,这使我可以标记效果,但不确切地说它是什么时候发生的.

我的概念证明每分钟计算一次.我认为下一步是:

  • 在接下来的365天内使用类似的方法创建查找表以识别受影响的日期,然后查看那些日期内的每个小时

  • 以某种方式解析DateTime::Timezone模块中的DST规则.

有任何想法吗?我应该注意到我对Perl的了解非常基础.


编辑:

看起来另一种选择可能是移植到PHP并使用DateTimeZone::getTransitions.这确实返回了所有转换的数组,但PHP 5.3.0只添加了可选timestamp_begintimestamp_end参数来限制范围.

php perl timezone datetime dst

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

当我实际使用 - > meta时,我什么时候应该使Moose类不可变?

通常我会在课程__PACKAGE__->meta->make_immutable结束时通过编译完成一个课程.但是,我何时应该创建一个在运行时将角色组合成自身的类不可变?我是否应该这样做以获得更好的性能或者这是不兼容的make_immutablemake_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)

perl moose

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

使用perl将html转换为文本

我有一堆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)

perl cpan

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

Perl排序哈希的数组

我有一个如下所示的数组哈希:

{ $key, [$val1, $val2] }
Run Code Online (Sandbox Code Playgroud)

我正在尝试按数值排序数组的第二个值并打印出整个哈希值.我看过Schwartzian变换的帖子,但我还没有看到一个完全符合我想要的东西.我也对语法以及如何将排序后的值映射回原始{$key, [$val1, $val2] }形式感到困惑.任何帮助,将不胜感激!

arrays sorting perl hash

4
推荐指数
2
解决办法
5071
查看次数

在开发过程中测试perl模块的正确方法是什么?

我正在开发一个个人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模块时运行测试的正确方法什么?

testing perl module

4
推荐指数
1
解决办法
1330
查看次数

从Native指针中获取数据

将数据导入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:继克里斯托夫的回答(谢谢!)之后,我们可以对此进行更多细化,然后我们将这些值重新纳入 …

perl6 nativecall

4
推荐指数
2
解决办法
142
查看次数