我一直在想这个,但从来没有真正深入了解它.
情况是这样的:我有一组相对较大的数据实例.每个实例都具有相同的集合或属性,例如:
# 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的值)和......便利性(代码可读性等).
谢谢!
我有一串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吗?
我使用Moose创建了一个包,我想要nstore一些大型实例.生成的二进制文件非常大(500 + MB),所以我想压缩它们.
这样做的最佳方式是什么?我应该打开文件句柄bzip等,然后存储使用fd_nstore?
我是Moose新手,我想知道是否常见
our $VERSION = "0.001";
$VERSION = eval $VERSION;
Run Code Online (Sandbox Code Playgroud)
也应该在Moose包中使用,或者Moose有一些替代的版本控制方式.无法在Moose文档中找到引用.
我平时用Storable用nstore,但现在我有一个模块有CODE,显然Storable不喜欢这样.
我发现YAML(而YAML::XS这我真的不能去上班).我还对MooseX :: Storage进行了一些实验,但没有取得多大成功.
还有其他选择吗?你会推荐什么?
我MooseX::Storage用于Moose对象的序列化.我可以使用它将多个Moose对象序列化到同一个文件,或者更具体地说,是Moose对象的数组或散列吗?
我想我可以定义另一个Moose对象('array_of_myobj'),但这不是很优雅.
那么,您如何建议序列化Moose对象的数组(或散列)?
我错过了什么,或JSON缺少write_to_file()和read_from_file()子程序?
显然,我可以很容易地实现它们,但是因为它们看起来很方便,我想它们怎么可能不存在.
我有一个具有以下属性的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泛型).
我想传递一个带矩阵的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)
在读取矩阵之前,最大行大小(即矩阵列的数量)是未知的.
我正在使用perl back-ticks语法来运行一些命令.我想将命令的输出写入文件并打印到stdout.我可以通过在>我的后面标记的字符串的末尾添加一个来完成第一个,但是我不知道热,以便在生成后立即打印输出.如果我做的事情
print `command`;
Run Code Online (Sandbox Code Playgroud)
只有在command完成执行后才打印输出.
谢谢,戴夫