小编Dal*_*aen的帖子

如何提供(分发)Perl应用程序?

我在Perl中编写了一个程序,现在我想把它发送给好友.我不希望他有任何打扰它的麻烦.

我如何制作一些他可以点击的包装并准备好所有的东西?

PS.我可以请他下载ActivePerl并事先安装它.

PPS.我不需要隐藏.pl来源.我需要自动下载和安装所有必需的CPAN模块.

另外,如果将来我需要将其扩展用于生产交付呢?这意味着,它不是接收方的伙伴,而是客户先生?

windows perl

10
推荐指数
4
解决办法
3226
查看次数

哪个cpan模块最适合阅读和学习?

我最近查看了DBIx :: Class的源代码,发现我不理解一件事(虽然我在尝试时掌握了几个技巧).

所以我的问题是:对于想要学习的人,以及以什么顺序阅读哪些CPAN模块?

perl cpan

10
推荐指数
2
解决办法
2376
查看次数

多路复用回调

假设我在一个应用程序中有许多任务,可以按任何顺序完成.我需要在所有任务完成后运行一些代码.如果这很重要,应用程序在AnyEvent下运行,但没有Coro.

从某种程度上说,AnyEvent$cv->begin/$cv->end让我想要什么.但是,我希望有更细粒度的控制.例如,我想无法两次"完成"任务.从所有任务中收集数据的能力也很不错.

当然,这可以做到.设置许多共享哈希的回调; 任务完成时从该哈希中删除键; 当散列为空时调用megacallback.我想知道是否有更文明的方式,也许是一些CPAN模块?

例如,这是一个可以满足我需求的虚构API.

#!/usr/bin/perl -w 
use strict;

use Some::Module;

# Set goals
my $cb = Some::Module->new( sub { say 'BOOM!' } );
$cb->begin( qw(foo bar) );

# Much later, as tasks start getting done
$cb->end( foo => 42 );       # "return" value from task 'foo'
$cb->begin( 'baz' );         # can add more tasks, why not
$cb->end( 'bar' );           # just finish task 'bar'
# still waiting for 'baz' to finish at this point …
Run Code Online (Sandbox Code Playgroud)

perl asynchronous

10
推荐指数
1
解决办法
513
查看次数

找出哪些本地分支与远程同步

假设我有一个包含多个分支的git存储库.我怀疑一些分支机构没有被推向上游,或者已经过时,或者两者都被推(即分叉).

有没有办法通过一个命令找出哪些分支与远程同步?(编写脚本是可以的,但我想知道是否已有这样的脚本).

git

8
推荐指数
2
解决办法
3795
查看次数

在AnyEvent下编写好的面向对象代码

我们正在构建一个具有复杂逻辑的大型应用程序,它由模块组成.我曾经用更简单的方法构建更大规模的方法,例如,

# fig. 1   
package Foo;
sub highlevel {
    my ($self, $user, $event) = @_;
    my $session = $self->get_session($user);
    my $result = $self->do_stuff($session, $event);
    $self->save_session($session);
    return $result;
};
Run Code Online (Sandbox Code Playgroud)

(当然这是简化的).返回结果,抛出异常,每个人都很开心.

现在,我们正在转向AnyEvent.我的模块不是最高级别,所以我做不到

# fig. 2
my $cv = AnyEvent->condvar;
# do stuff
return $cv->recv;
Run Code Online (Sandbox Code Playgroud)

到目前为止我见过的大多数AE模块都是这样的:

# fig. 3
$module->do_stuff( $input, 
    on_success => sub { ... }, 
    on_error => sub { ... }
);
Run Code Online (Sandbox Code Playgroud)

所以我完成了对低级方法的重写并尝试继续使用highlevel()和...

# fig. 4
package Foo;
sub highlevel {
    my ($self, $user, $event, %callbacks) = @_;
    my $done = …
Run Code Online (Sandbox Code Playgroud)

perl asynchronous anyevent

8
推荐指数
2
解决办法
810
查看次数

内存高效的统计分配模块

我想分析一些数据(比如网络服务响应时间)并获得各种统计信息,主要是百分位数/分位数和未完成值的存在.

我知道Statistics :: Descriptive,但是,我不想将所有数据存储在内存中.另一方面,将我的结果减少几个百分点就可以了,我只关心巨大的差异.

所以我提出了以下想法:创建一个对数桶阵列,并计算每个桶中的数据点.将数据分布在6个数量级并且保证精度为1%仍然留给我6 * log 10 / log 1.01 =~ 1400很好的存储桶(36 kb的内存,给定当前Perl的标量大小).

计算百分位数很简单 - 只需将桶计数器加起来直到$sum超过$percentage * $total_count.

但是,在我开始编写实际代码之前,我想问一下哪些内存高效的统计模块(对于Perl)和算法已经存在.

我发现了这个问题,其中一个答案提出了类似的方法.但是,还没有找到现成的Perl实现.

这是Perlmonks问题的略微编辑版本 .

statistics perl

8
推荐指数
1
解决办法
303
查看次数

从Devel :: Cover的覆盖率报告中排除某些路径

我们的项目中有很多共享库位于特定路径下(但不是Perl的默认@INC).

默认情况下,cover -t将报告正在测试的模块和我们的通用模块的覆盖范围.我只需要关于我正在开发的模块的覆盖数据.

我已经尝试将路径添加到--ignore_re,但它没有帮助.

所以问题是:有没有办法从覆盖测试中排除模块路径?

testing perl

6
推荐指数
1
解决办法
650
查看次数

有时,圆形数字返回为"0.999999999992345"

我有一份报告应该返回一些内容

SELECT brand, ROUND(SUM(count * price) / SUM(count), 2) 
    WHERE ... GROUP BY brand, ...; 
Run Code Online (Sandbox Code Playgroud)

问题是,我有时在我的perl代码中得到9990.32999999999992345而不是直接SQL请求返回的9990.33.

这个数字在fetchrow_hashref之后开始就是这样,如果有的话.在不同的查询中,相同的数字可以是"好"或"坏"形式,但在任何特定查询中总是以相同的方式.

我该如何追踪?

mysql perl floating-accuracy

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

MakeMaker:make test vs make dist

假设我已经创建了一个目录module-starter,并编写了几个额外的模块和测试.

make test然后将在所有模块中运行所有测试,但是只会将提到的文件打包到tar.gz中.t/lib/make distMANIFEST

所以我最近因跑步make test && make dist而被烧伤,但仍然得到了破损的包裹.

我的问题是:我错过了什么,或者这可以被报告为MakeMaker中的一个小错误?(Makefile.PL似乎依赖于此).

perl cpan makemaker

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