我有一个非常简单的Perl问题,在我的一生中我无法解决。
我正在使用perl脚本中来自REST端点的JSON格式数据。数据的形状如下:
{
"ScriptRunning": true
}还有一些其他的东西,但我真正关心的是ScriptRunning标签。我使用JSON::Syck::Load来使用这些数据,如下所示:
my $running_scripts = JSON::Syck::Load($output_from_rest_call)(在我当前的环境中,不可能为CPAN获取其他库,因此我只能继续使用它)。据我所知,所有这些都是正确的,我使用数据::Dumper来确认数据看起来很好:
$VAR1 = {
'ScriptRunning' => 1 # or '' if false
}但是,我不知道如何实际获得'ScriptRunning‘的值。我已经做了print ref $running_scripts,并确认它是一个HASH,但是当我尝试索引到哈希时,我什么也没有得到。我试过以下几种方法:
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有什么想法吗?
发布于 2020-03-16 20:14:34
你需要use strict; (当你在做的时候,也需要use warnings;,当你真的被困住的时候,也需要use diagnostics; )。通常情况下,总是 use strict;和use warnings;,因为它们阻止了问题代码的运行,并为您提供了一些更有用的输出。
您还应该阅读perldoc perlreftut,这有助于解释您正在处理的问题。
变量$running_scripts不是散列,而是“哈希引用”,这是一个重要的区别。当您对实际哈希调用ref时,它返回一个假值,因为它不是引用。
您需要做的是“取消引用”,使用箭头算子获取值。
要使keys调用正常工作,需要有一个单独的反引用语法。
my $script_is_running = $running_scripts->{ScriptRunning};
my @keys_in_running_scripts = keys %{$running_scripts};https://stackoverflow.com/questions/60712288
复制相似问题