首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl散列元信息

Perl散列元信息
EN

Stack Overflow用户
提问于 2012-07-02 19:14:35
回答 2查看 99关注 0票数 2

是否可以在其中存储有关散列的信息?我的意思是,不需要以普通的方式将信息添加到散列中,这会影响键、值等。

问题是,我正在将一个twod_array读入散列,但希望在不影响遍历散列的方式的情况下将顺序存储在原始数组中。

举个例子:

代码语言:javascript
复制
my @the_keys=keys %the_hash;

不应返回有关哈希顺序的信息。

有没有办法在哈希表中存储元数据?

EN

回答 2

Stack Overflow用户

发布于 2012-07-02 20:29:07

您可以使用tie mechanism存储任意元数据。使用不影响标准哈希接口的包存储的最小示例:

代码语言:javascript
复制
package MetadataHash;
use Tie::Hash;
use base 'Tie::StdHash';
use Scalar::Util qw(refaddr);
our %INSERT_ORDER;
sub STORE {
    my ($h, $k, $v) = @_;
    $h->{$k} = $v;
    push @{ $INSERT_ORDER{refaddr $h} }, $k;
}
1;

代码语言:javascript
复制
package main;
tie my %h, 'MetadataHash';
%h = ( I => 1, n => 2, d => 3, e => 4 );
$h{x} = 5;
# %MetadataHash::INSERT_ORDER is (9042936 => ['I', 'n', 'd', 'e', 'x'])
print keys %h;
# 'enIxd'
票数 4
EN

Stack Overflow用户

发布于 2012-07-02 19:18:11

好吧,我想人们总是可以使用Tie::Hash::Indexed

代码语言:javascript
复制
use Tie::Hash::Indexed;

tie my %hash, 'Tie::Hash::Indexed';
%hash = ( I => 1, n => 2, d => 3, e => 4 );
$hash{x} = 5;

print keys %hash, "\n";    # prints 'Index'
print values %hash, "\n";  # prints '12345'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11292539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档