首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从perl JSON::Syck::Load创建的哈希中提取值

从perl JSON::Syck::Load创建的哈希中提取值
EN

Stack Overflow用户
提问于 2020-03-16 19:43:30
回答 1查看 43关注 0票数 0

我有一个非常简单的Perl问题,在我的一生中我无法解决。

我正在使用perl脚本中来自REST端点的JSON格式数据。数据的形状如下:

代码语言:javascript
复制
{
   "ScriptRunning": true
}

还有一些其他的东西,但我真正关心的是ScriptRunning标签。我使用JSON::Syck::Load来使用这些数据,如下所示:

代码语言:javascript
复制
my $running_scripts = JSON::Syck::Load($output_from_rest_call)

(在我当前的环境中,不可能为CPAN获取其他库,因此我只能继续使用它)。据我所知,所有这些都是正确的,我使用数据::Dumper来确认数据看起来很好:

代码语言:javascript
复制
$VAR1 = {
    'ScriptRunning' => 1 # or '' if false
}

但是,我不知道如何实际获得'ScriptRunning‘的值。我已经做了print ref $running_scripts,并确认它是一个HASH,但是当我尝试索引到哈希时,我什么也没有得到。我试过以下几种方法:

代码语言:javascript
复制
my $script_is_running = $running_scripts{'ScriptRunning'};
my $script_is_running = $running_scripts{ScriptRunning};
my $keys_in_running_scripts = keys $running_scripts; # keys_in_running_scripts is empty
my $keys_in_running_scripts = keys %running_scripts; # keys_in_running_scripts is empty

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 20:14:34

你需要use strict; (当你在做的时候,也需要use warnings;,当你真的被困住的时候,也需要use diagnostics; )。通常情况下,总是 use strict;use warnings;,因为它们阻止了问题代码的运行,并为您提供了一些更有用的输出。

您还应该阅读perldoc perlreftut,这有助于解释您正在处理的问题。

变量$running_scripts不是散列,而是“哈希引用”,这是一个重要的区别。当您对实际哈希调用ref时,它返回一个假值,因为它不是引用。

您需要做的是“取消引用”,使用箭头算子获取值。

要使keys调用正常工作,需要有一个单独的反引用语法。

代码语言:javascript
复制
my $script_is_running = $running_scripts->{ScriptRunning};
my @keys_in_running_scripts = keys %{$running_scripts};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60712288

复制
相关文章

相似问题

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