小编Dav*_*d B的帖子

我应该选择散列,对象还是数组来表示Perl中的数据实例?

我一直在想这个,但从来没有真正深入了解它.

情况是这样的:我有一组相对较大的数据实例.每个实例都具有相同的集合或属性,例如:

# a child instance
name
age
height
weight
hair_color
favorite_color
list_of_hobbies
Run Code Online (Sandbox Code Playgroud)

通常我会将一个孩子表示为哈希,并将所有孩子放在哈希哈希值(或哈希数组)中.

这种方法总是困扰我的是我并没有真正使用所有孩子(内部哈希)具有相同结构的事实.如果数据真的很大,似乎可能浪费内存,所以如果每个内部哈希都是从头开始存储的,那么键名的名称似乎比数据本身要多得多......同时请注意当我构建这样的数据结构时,我经常将nstore它们用于磁盘.

我想知道在这个角度创建一个子对象是否更有意义,即使我不需要OO.它会更紧凑吗?查询会更快吗?

或者将每个孩子表示为阵列是否有意义?例如:

my ($name, $age, $height, $weight, $hair_color, $favorite_color, $list_of_hobbies) = 0..7; 
my $children_h = {
  James => ["James", 12, 1.62, 73, "dark brown", "blue", ["playing football", "eating ice-cream"]], 
  Norah => [...], 
  Billy => [...]
};
print "James height is $children_h->{James}[$height]\n";
Run Code Online (Sandbox Code Playgroud)

回想一下我的主要关注点是空间效率(存储时的RAM或磁盘),时间效率(即加载存储的数据集然后从实例y获取属性x的值)和......便利性(代码可读性等).

谢谢!

arrays perl hash object data-structures

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

如何在不实际拆包的情况下获取Perl中的打包物品数量?

我有一串packed值,这些值是使用以下内容顺序创建的:

while (...) {
 ...
 $packed .= pack( 'L', $val );
}
Run Code Online (Sandbox Code Playgroud)

在另一个程序中,我加载后$packed,我想知道实际打包了多少个值.我知道如何做到这一点unpack:

my @vals = unpack( 'L*', $packed );
print scalar(@vals);
Run Code Online (Sandbox Code Playgroud)

但这真的有必要吗?如果我只关心值的数量,我可以做得更好并跳过unpacking吗?

perl unpack pack

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

我应该如何使用Perl存储和压缩Moose对象?

我使用Moose创建了一个包,我想要nstore一些大型实例.生成的二进制文件非常大(500 + MB),所以我想压缩它们.

这样做的最佳方式是什么?我应该打开文件句柄bzip等,然后存储使用fd_nstore

compression perl store moose

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

我该如何控制Perl Moose对象的版本?

我是Moose新手,我想知道是否常见

our $VERSION = "0.001";
$VERSION = eval $VERSION;
Run Code Online (Sandbox Code Playgroud)

也应该在Moose包中使用,或者Moose有一些替代的版本控制方式.无法在Moose文档中找到引用.

versioning perl moose

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

哪些推荐的Perl模块可以序列化Moose对象?

我平时用Storablenstore,但现在我有一个模块CODE,显然Storable不喜欢这样.

我发现YAML(而YAML::XS我真的不能去上班).我还对MooseX :: Storage进行了一些实验,没有取得多大成功.

还有其他选择吗?你会推荐什么?

perl serialization yaml moose coderef

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

我该如何序列化Moose对象数组?

MooseX::Storage用于Moose对象的序列化.我可以使用它将多个Moose对象序列化到同一个文件,或者更具体地说,是Moose对象的数组或散列吗?

我想我可以定义另一个Moose对象('array_of_myobj'),但这不是很优雅.

那么,您如何建议序列化Moose对象的数组(或散列)?

perl serialization storage moose

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

为什么Perl的JSON模块不能读取或写入文件?

我错过了什么,或JSON缺少write_to_file()read_from_file()子程序?

显然,我可以很容易地实现它们,但是因为它们看起来很方便,我想它们怎么可能不存在.

perl json

3
推荐指数
2
解决办法
3000
查看次数

我可以在构造时设置Moose对象属性的'isa'吗?

我有一个具有以下属性的Moose对象:

has 'people' => (
 is      => 'ro',
 isa     => 'ArrayRef[Person::Child]',
 traits  => ['Array'],
 default => sub { [] },
 handles => {
  all_people     => 'elements',
  get_people     => 'get',
  push_people    => 'push',
  pop_people     => 'pop',
  count_people   => 'count',
  sort_people    => 'sort',
  grep_people    => 'grep',
 },
);
Run Code Online (Sandbox Code Playgroud)

注意,它isa被设置为'ArrayRef [Person :: Child]'.

我想能够之间进行选择Person::Child,Person::Adult在创建我的对象等.那是可能的,或者我必须创建不同的对象,这将是相同的,除了isa在的people属性?

(这让我想起了Java泛型).

perl moose

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

如何读取R中缺少末尾元素的矩阵?

我想传递一个带矩阵的R txt文件,其中从行中省略拖尾零(除了第一个拖尾零,如果有的话).那些缺失的值被视为零.

例如:

8 7 0
5 4 3 2 1
4 8 9
Run Code Online (Sandbox Code Playgroud)

应该理解为:

8 7 0 0 0
5 4 3 2 1
4 8 9 0 0
Run Code Online (Sandbox Code Playgroud)

在读取矩阵之前,最大行大小(即矩阵列的数量)是未知的.

r matrix

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

我如何立即收到命令输出?

我正在使用perl back-ticks语法来运行一些命令.我想将命令的输出写入文件并打印到stdout.我可以通过在>我的后面标记的字符串的末尾添加一个来完成第一个,但是我不知道热,以便在生成后立即打印输出.如果我做的事情

print `command`; 
Run Code Online (Sandbox Code Playgroud)

只有在command完成执行后才打印输出.

谢谢,戴夫

perl buffering backticks

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