小编Dav*_*d B的帖子

如何使用Perl动态编写压缩文件?

我使用Perl生成相对较大的文件.我生成的文件有两种:

  1. 表文件,即文本文件我逐行(逐行)打印,主要包含数字.典型的线条如下:

    126891 126991 14545 12

  2. 我创建的序列化对象然后使用存储到文件中Storable::nstore.这些对象通常包含一些带有数值的大哈希.可能已经pack编辑了对象中unpack的值以节省空间(并且在使用之前对象是每个值).

目前我通常会做以下事情:

use IO::Compress::Gzip qw(gzip $GzipError);

# create normal, uncompressed file ($out_file)
# ...

# compress file using gzip
my $gz_out_file = "$out_file.gz";
gzip $out_file => $gz_out_file or die "gzip failed: $GzipError";

# delete uncompressed file
unlink($out_file) or die "can't unlink file $out_file: $!";
Run Code Online (Sandbox Code Playgroud)

这是非常低效的,因为我首先将大文件写入磁盘,然后gzip再次读取并压缩它.所以我的问题如下:

  1. 我可以在没有先将文件写入磁盘的情况下创建压缩文件吗?是否可以按顺序创建压缩文件,即像前面描述的方案(1)中一样逐行打印?

  2. 的确Gzip听起来像一个合适的选择?aRe还有其他推荐的压缩机用于我描述的数据类型吗?

  3. pack对象中的值是否有意义,以后将被存储和压缩?

我的考虑主要是节省磁盘空间并允许以后快速解压缩.

compression perl serialization gzip

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

如何在MultiMarkdown中使表格单元格跨多行?

我正在使用Text :: MultiMarkdown从Perl打印到HTML。

我想创建一个表,其中的某些单元格包含一些字符串,每个字符串都在单元格中的单独一行中(请参见下图中的“四个五个六个”)。样品台

我可以这样做吗?

perl markup

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

如何修改Moose属性句柄?

按照phaylon的回答"如何灵活地向Moose对象添加数据?" ,假设我有以下Moose属性:

has custom_fields => (
    traits     => [qw( Hash )],
    isa        => 'HashRef',
    builder    => '_build_custom_fields',
    handles    => {
        custom_field         => 'accessor',
        has_custom_field     => 'exists',
        custom_fields        => 'keys',
        has_custom_fields    => 'count',
        delete_custom_field  => 'delete',
    },
);

sub _build_custom_fields { {} }
Run Code Online (Sandbox Code Playgroud)

现在,假设我想尝试读取(但不是写入)不存在的自定义字段时会呱呱叫.我被phaylon建议custom_field用一个环绕修饰语包裹.我已经around按照Moose文档中的各种示例尝试了修饰符,但无法确定如何修改句柄(而不仅仅是对象方法).

或者,是否有另一种方法来实现这个croak-if-try-to-read-unfxisting-key?

perl moose

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

如果有任何内容写入STDERR,我如何运行系统命令并死掉?

我正在编写一个使用外部脚本的Perl脚本.外部脚本必须从特定目录运行,因此我发现以下内容非常有用:

use IPC::System::Simple qw(capture);

my @args = ('external script path...', 'arg1', ...);
my $out = capture( [0], "cd $dir ; @args" );
Run Code Online (Sandbox Code Playgroud)

有时外部脚本会将内容写入STDERR,但仍会返回0.我希望捕获这些时间和confess(或die).由于我不控制外部脚本的返回值,我想也许我可以捕获它的STDERR所以我会有这样的东西:

my ($out, $err) = cool_capture( [0], "cd $dir ; @args" );
say "Output was: $out";
if ($err) {
 die "Error: this was written to STDERR: $err";
}
Run Code Online (Sandbox Code Playgroud)

我能做什么?

perl system die stderr

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

如何在不解析它​​们的情况下将传递的标志/参数转换为我的Perl程序?

我想传递一个perl程序一组参数和标志,例如 my_script.pl --flag1 --arg1=value --flag2 …

有没有办法快速将所有这些转换为一些标准结构(哈希)而不是解析?

谢谢,戴夫

perl parsing arguments

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

过滤R中的数据帧

我有以下数据帧(df)

 start     end
1    14379   32094
2   151884  174367
3   438422  449382
4   618123  621256
5   698271  714321
6   973394  975857
7   980508  982372
8   994539  994661
9  1055151 1058824
.   .       .
.   .       .
.   .       .
Run Code Online (Sandbox Code Playgroud)

还有一个带有布尔值(vec)的长布尔向量.

我想过滤掉df其中包含TRUE相应位置中至少一个值的所有范围vec.

换句话说,start=x end=yiff将输出一行!any(vec[x:y]).

有关如何实现这一目标的任何想法?

r filter dataframe

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

KiokuDB中的"弱引用"是什么?

KiokuDB教程 提到的弱引用究竟是什么?

它们与"正常"参考文献有何不同?

perl serialization moose kiokudb

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

标签 统计

perl ×6

moose ×2

serialization ×2

arguments ×1

compression ×1

dataframe ×1

die ×1

filter ×1

gzip ×1

kiokudb ×1

markup ×1

parsing ×1

r ×1

stderr ×1

system ×1