小编use*_*481的帖子

当一个带整数值的double被转换为一个整数时,它是否保证"正确"?

当double具有'exact'整数值时,如下所示:

double x = 1.0;
double y = 123123;
double z = -4.000000;
Run Code Online (Sandbox Code Playgroud)

当通过(int)x,(int)y,(int)z强制转换为整数类型时,它是否可以保证正确地舍入到1,123123和-4?(并且不截断为0,123122或-5 b/c的浮点怪异).我问b/c根据这个页面(这是关于lua中的fp,一种默认只有双倍数字类型的语言),讨论如何根据IEEE 754对双精度进行整数运算,但我不是确定当使用整数类型参数调用C函数时,我需要担心手动舍入双精度,或者当双精度具有精确整数值时需要注意.

c floating-point lua

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

我应该如何改进perl应用程序部署过程?

我开发并维护了一个包含50多个脚本的生物信息学应用程序套件,其部署过程非常混乱:

  • 整个套件位于一个大的git存储库中.它有很多CPAN依赖项,还有许多内部模块.
  • 开发平台是Linux.
  • 部署平台是Windows(20多个用户),Mac(10 +),Linux(2-3).大多数人不是"超级用户".
  • 对于Windows,我有一个安装程序(用NSIS制作)用于草莓perl +所需的模块(即,我在窗户盒上安装了草莓,安装了所有模块并压缩了c:\ strawberry),以及套件的另一个安装程序 - 我做了这个b/c套件比所需模块列表更新了很多.
  • 对于Mac,我将perl 5.14,所有必需的cpan模块和应用程序套件捆绑到一个可双击的安装程序中.我不使用系统perl b/c它往往是过时的.我将所有东西捆绑在一起不像在windows b/c我吮吸mac.
  • 对于Linux,我手动处理它们的安装,因为它们只有少数,并且它们使用不同的发行版.

这显然是几代开发人员有机增长的混乱.理想情况下,我想从内部库和各种相关脚本组创建cpan-installable发行版,并使用模块依赖项让cpan为我安装它们.

但我不知道这样做的最好的办法是,B/C我仍然需要分发Perl本身,就不得不写某种非命令行界面CPAN的,控制第三方CPAN的确切版本模块,默认指向我的"DarkPan",我将存储模块,如何推送更新等.

我不认为我可以使用PerlApp或Par,因为afaik用于捆绑单个脚本,而不是整个套件.

任何建议高度赞赏.

deployment perl cpan

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

我应该如何使用Perl模块分发数据文件?

我已经开始了module-starter(带--builder=Module::Build).我想用来SQL::Library将我的SQL收集到一个.ini文件中......但是为了在运行时找到该文件,我需要知道它的确切路径.如何在运行时获取模块"数据目录"的路径?

到目前为止,我一直在使用FindBin(比如"$FindBin::Bin/../../path/to/module/datafiles/foo.ini",但我发现它不是很强大(例如,当PATH中两个不同的目录中有两个具有相同名称的程序时,它似乎会中断).

perl cpan

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

perl中的C类数组

我想在内存中创建和操作(4字节)整数的大数组.从大到大,我的意思是数亿.阵列中的每个细胞将充当染色体上位置的计数器.我需要的只是让它适合内存,并快速(O(1))访问元素.我正在计算的东西不是稀疏特征,所以我不能使用稀疏数组.

我不能用常规的perl列表来做这个,因为perl(至少在我的机器上)每个元素使用64个字节,所以我使用的大多数生物的基因组太大了.我已经尝试通过SQLite和散列绑定将数据存储在磁盘上,尽管它们有效,但速度很慢,特别是在普通驱动器上.(当我在4驱动器raid 0上运行时,它的工作原理相当不错).

我以为我可以使用PDL数组,b/c PDL就像C一样存储它的数组,每个元素只使用4个字节.但是,与perl列表相比,我发现更新速度极慢:

use PDL;
use Benchmark qw/cmpthese/;

my $N = 1_000_000;
my @perl = (0 .. $N - 1);
my $pdl = zeroes $N;

cmpthese(-1,{ 
    perl => sub{
        $perl[int(rand($N))]++;
    },
    pdl => sub{
        # note that I'm not even incrementing here just setting to 1
        $pdl->set(int(rand($N)), 1);
    }
});
Run Code Online (Sandbox Code Playgroud)

返回:

          Rate  pdl perl
pdl   481208/s   -- -87%
perl 3640889/s 657%   --    
Run Code Online (Sandbox Code Playgroud)

有谁知道如何提高pdl set()性能,或者知道可以实现这一目标的不同模块?

arrays perl pdl

8
推荐指数
3
解决办法
1343
查看次数

为什么在mojolicious中分离路由和控制器操作?

我正在阅读Mojolicious :: Guides :: Growing的部分,它告诉你如何将Mojolicious :: Lite发展成一个"组织良好"的cpan-uploadable应用程序.首先,它告诉您将M :: L应用程序拆分为启动脚本和应用程序类.

package MyApp;
use Mojo::Base 'Mojolicious';

use MyUsers;

sub startup {
  my $self = shift;

  # ...auth stuff omitted...

  my $r = $self->routes;
  $r->any('/' => sub {
    my $self = shift;

    my $user = $self->param('user') || '';
    my $pass = $self->param('pass') || '';
    return $self->render unless $self->users->check($user, $pass);

    $self->session(user => $user);
    $self->flash(message => 'Thanks for logging in.');
    $self->redirect_to('protected');
  } => 'index');

  $r->get('/protected' => sub {
    my $self = shift;
    return …
Run Code Online (Sandbox Code Playgroud)

perl mojolicious

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

我应该如何在Inline :: C中创建并返回一个arrayref?

我试图通过Inline :: C编写一个C函数,它将创建并返回一个对Perl的数组引用...下面是我的脚本和输出.我是否正在分配阵列并正确填充它?特别是,我创建了一个临时数组SV*并传递给它们av_make,并返回一个用它创建的引用newRV_noinc.当我使用Devel :: Peek :: Dump查看返回的数组ref时,引用计数似乎很好,它看起来与直接在perl中创建的相同数据结构相同.

我还不明白什么是致命sv_2mortal的,或者我是否需要它.显然,Inline :: C会自动调用sv_2mortal返回的函数SV*,这些函数可能相关也可能不相关.

#!/usr/bin/env perl
use strict;
use warnings FATAL => "all";
use 5.010_000;
use Data::Dumper;
use autodie;

use Inline ('C');
use Devel::Peek;

my $from_perl = [0 .. 9];
my $from_c = inline_array_maker(10); #same as above but in C

say Dumper $from_perl;
Dump($from_perl);

say Dumper $from_c;
Dump($from_c);


__END__
__C__
SV* (int len){
    int i;
    SV ** tmp_buffer;
    AV * arr;

    tmp_buffer …
Run Code Online (Sandbox Code Playgroud)

perl

6
推荐指数
2
解决办法
602
查看次数

在Perl中正确检测文件的行尾?

问题:我在Windows和*nix上都生成了数据(主要是CSV格式),主要在*nix上处理.Windows使用CRLF进行行结束,Unix使用LF.对于任何特定文件,我不知道它是否有窗口或*nix行结尾.到目前为止,我一直在写这样的东西来处理差异:

while (<$fh>){
    tr/\r\n//d;
    my @fields = split /,/, $_;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

在*nix上,\n部分相当于chomping,如果是windows生成的文件,则另外删除\ r \n(CR).

但是现在我想要Text :: CSV_XS b/c我开始使用带引号的数据获取更奇怪的数据文件,可能还有嵌入式换行符等.为了让这个模块读取这些文件,Text :: CSV_XS: :getline()要求您指定行尾字符.(我无法读取上面的每一行,tr/\n\r // d,然后用Text :: CSV b/c解析它不能正确处理嵌入式换行符).如何正确检测任意文件是否使用windows或*nix样式行结尾,所以我可以告诉Text :: CSV_XS :: eol()如何chomp()?

我在CPAN上找不到简单检测行结尾的模块.我不想首先通过dos2unix转换我的所有数据文件,b/c文件很大(数百千兆字节),并且每个文件花费10多分钟来处理这么简单的事情似乎很愚蠢.我想过编写一个函数来读取文件的前几百个字节并计算LF和CRLF,但我拒绝相信这没有更好的解决方案.

有帮助吗?

注意:所有文件要么具有完全的Windows行结尾,要么具有*nix结尾,即它们不会混合在一个文件中.

perl newline

5
推荐指数
2
解决办法
9086
查看次数

在Moose中,通过对象的内部哈希直接访问成员变量是否安全?

Moose对象似乎是带有成员变量作为条目的祝福hashrefs.使用哈希语法访问成员是否安全?我想要的只是获取/设置成员变量的简单能力,但我发现perl生成的访问器的速度对于我的应用程序来说是不可接受的,直到我考虑在非驼鹿OO中重写它.是的,我知道优化是一种可以判处死刑的罪行,但我有一个十亿+行文件并添加一个简单的行计数器变量可以增加十亿+函数调用,这可以在一次运行中增加几小时.

显示慢度(100x)的示例:

package Bullwinkle;
use strict;
use warnings;
use Moose;

has 'x' => (is => 'rw', default => 0);

# counter is also slow
has 'counter' => (
    traits  => ['Counter'],
    is      => 'ro',
    isa     => 'Num',
    default => 0,
    handles => {
        inc_counter   => 'inc',
    },
);

package main;
use strict;
use warnings;
use Benchmark qw/timethese cmpthese/;

my $bull = Bullwinkle->new();
my $hash = { x => 0 };

cmpthese(-1,{ 
    bull => sub{
        $bull->x(1 + $bull->x());
    },
    bull_direct => …
Run Code Online (Sandbox Code Playgroud)

perl moose

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

是否有"官方"CPAN规范文档?

有没有权威和/或事实上的文件详细说明CPAN如何工作,足够详细,任何人都可以使用它从头开始重建CPAN而不依赖口头传统和传闻?记录目录结构的东西,应该在分发中的文件,版本号如何真正起作用,谁可以上传search.CPAN.org网站上列出的内容和内容等等?

perl cpan

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

IO :: All:如何从ARGV和DATA读取?

如何创建一个IO :: All对象来读取文件处理ARGV和DATA?

use strict;
use warnings;
use 5.010_000;
use IO::All;

# none of these work...
my $io = io->handle(DATA);
my $io = io->handle(\*DATA);
my $f = \*DATA;
my $io = io->handle($f);
my $io = io->handle({$f});
my $io = io->handle({DATA});
my $io = io->handle({\*DATA});

say $io->slurp();

__DATA__
FOO
BAR
QUUX
Run Code Online (Sandbox Code Playgroud)

perl

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

标签 统计

perl ×9

cpan ×3

arrays ×1

c ×1

deployment ×1

floating-point ×1

lua ×1

mojolicious ×1

moose ×1

newline ×1

pdl ×1