我在Perl中编写了一个程序,现在我想把它发送给好友.我不希望他有任何打扰它的麻烦.
我如何制作一些他可以点击的包装并准备好所有的东西?
PS.我可以请他下载ActivePerl并事先安装它.
PPS.我不需要隐藏.pl来源.我需要自动下载和安装所有必需的CPAN模块.
另外,如果将来我需要将其扩展用于生产交付呢?这意味着,它不是接收方的伙伴,而是客户先生?
我最近查看了DBIx :: Class的源代码,发现我不理解一件事(虽然我在尝试时掌握了几个技巧).
所以我的问题是:对于想要学习的人,以及以什么顺序阅读哪些CPAN模块?
假设我在一个应用程序中有许多任务,可以按任何顺序完成.我需要在所有任务完成后运行一些代码.如果这很重要,应用程序在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) 假设我有一个包含多个分支的git存储库.我怀疑一些分支机构没有被推向上游,或者已经过时,或者两者都被推(即分叉).
有没有办法通过一个命令找出哪些分支与远程同步?(编写脚本是可以的,但我想知道是否已有这样的脚本).
我们正在构建一个具有复杂逻辑的大型应用程序,它由模块组成.我曾经用更简单的方法构建更大规模的方法,例如,
# 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) 我想分析一些数据(比如网络服务响应时间)并获得各种统计信息,主要是百分位数/分位数和未完成值的存在.
我知道Statistics :: Descriptive,但是,我不想将所有数据存储在内存中.另一方面,将我的结果减少几个百分点就可以了,我只关心巨大的差异.
所以我提出了以下想法:创建一个对数桶阵列,并计算每个桶中的数据点.将数据分布在6个数量级并且保证精度为1%仍然留给我6 * log 10 / log 1.01 =~ 1400很好的存储桶(36 kb的内存,给定当前Perl的标量大小).
计算百分位数很简单 - 只需将桶计数器加起来直到$sum超过$percentage * $total_count.
但是,在我开始编写实际代码之前,我想问一下哪些内存高效的统计模块(对于Perl)和算法已经存在.
我发现了这个问题,其中一个答案提出了类似的方法.但是,还没有找到现成的Perl实现.
这是Perlmonks问题的略微编辑版本 .
我们的项目中有很多共享库位于特定路径下(但不是Perl的默认@INC).
默认情况下,cover -t将报告正在测试的模块和我们的通用模块的覆盖范围.我只需要关于我正在开发的模块的覆盖数据.
我已经尝试将路径添加到--ignore_re,但它没有帮助.
所以问题是:有没有办法从覆盖测试中排除模块路径?
我有一份报告应该返回一些内容
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之后开始就是这样,如果有的话.在不同的查询中,相同的数字可以是"好"或"坏"形式,但在任何特定查询中总是以相同的方式.
我该如何追踪?
假设我已经创建了一个目录module-starter,并编写了几个额外的模块和测试.
make test然后将在所有模块中运行所有测试,但是只会将提到的文件打包到tar.gz中.t/lib/make distMANIFEST
所以我最近因跑步make test && make dist而被烧伤,但仍然得到了破损的包裹.
我的问题是:我错过了什么,或者这可以被报告为MakeMaker中的一个小错误?(Makefile.PL似乎依赖于此).
perl ×8
asynchronous ×2
cpan ×2
anyevent ×1
git ×1
makemaker ×1
mysql ×1
statistics ×1
testing ×1
windows ×1