gpt4 book ai didi

perl - 使用字符串访问多维哈希

转载 作者:行者123 更新时间:2023-12-05 00:40:12 24 4
gpt4 key购买 nike

我有一个大的多维哈希,它是一个 JSON 结构的导入。

my %bighash;

%bighash 中有一个元素叫做:

$bighash{'core'}{'dates'}{'year'} = 2019.

我有一个名为 core.dates.year 的单独字符串变量,我想用它从 %bighash 中提取 2019。

我写了这段代码:

my @keys  = split(/\./, 'core.dates.year');
my %hash = ();
my $hash_ref = \%hash;

for my $key ( @keys ){
$hash_ref->{$key} = {};
$hash_ref = $hash_ref->{$key};
}

当我执行时:

say Dumper \%hash;

输出:

$VAR1 = {
'core' => {
'dates' => {
'year' => {}
}
}
};

到目前为止一切都很好。但我现在想说的是:

print $bighash{\%hash};

我想返回 2019。但没有返回任何内容,或者我看到错误“在 %bighash 中使用未初始化的值连接 (.) 或 script.pl 第 1371 行第 17 行的字符串 (#1 )...

谁能告诉我发生了什么事?

我的项目涉及在外部文件中嵌入字符串,然后将其替换为 %bighash 中的实际值,因此它只是字符串插值。

谢谢!

最佳答案

Can someone point me into what is going on [when I use $bighash{\%hash}]?

哈希键是字符串,\%hash的字符串化类似于HASH(0x655178)%bighash 中唯一的元素具有 core — 而不是 HASH(0x655178) — 作为键,因此哈希查找返回 undef.


有用的工具:

sub dive_val :lvalue { my $p = \shift; $p //= \( $$p->{$_} ) for @_; $$p }   # For setting
sub dive { my $r = shift; $r //= $r->{$_} for @_; $r } # For getting

dive_val(\%hash, split /\./, 'core.dates.year') = 2019;
say dive(\%hash, split /\./, 'core.dates.year');

关于perl - 使用字符串访问多维哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54888357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com