小编don*_*uch的帖子

在Perl中解码和使用JSON数据

我很困惑访问我已解码的一些JSON数据的内容.这是一个例子

我不明白为什么这个解决方案有效,而我自己没有.我的问题在下面重述

my $json_raw = getJSON(); 
my $content  = decode_json($json_raw);
print Data::Dumper($content);
Run Code Online (Sandbox Code Playgroud)

此时我的JSON数据已经转化为此

$VAR1 = { 'items' => [ 1, 2, 3, 4 ] };
Run Code Online (Sandbox Code Playgroud)

我的猜测告诉我,一旦解码,该对象将是一个散列,其中一个元素具有键items,数组引用作为值.

$content{'items'}[0]
Run Code Online (Sandbox Code Playgroud)

where $content{'items'}将获取数组引用,外部$...[0]将访问数组中的第一个元素并将其解释为标量.但这不起作用.我收到一条错误消息use of uninitialized value [...]

但是,以下工作正常:

$content->{items}[0]
Run Code Online (Sandbox Code Playgroud)

其中$content->{items}产生数组引用并[0]访问该数组的第一个元素.

问题

  • 为什么不$content{'items'}返回数组引用?我甚至试过@{content{'items'}},想一想,一旦我得到了值content{'items'},它就需要被解释为一个数组.但是,我仍然收到未初始化的数组引用.

  • 如何在不使用箭头运算符的情况下访问数组引用?

perl json

8
推荐指数
2
解决办法
1万
查看次数

Perl中的二维数组访问

试着学习Perl.我有一个填充了城市的阵列.我想通过引用子例程传递数组并打印每个城市输出.但是我有以下问题:

1)我可以在子例程中的while循环之前访问每个元素.但我无法访问while循环中的元素.我收到错误消息:

...
Use of uninitialized value in print at <filename> line 44, <GEN2> line 997 (#1)
Use of uninitialized value in print at <filename> line 44, <GEN2> line 998 (#1)
...
Run Code Online (Sandbox Code Playgroud)

以下是代码.我评论了什么打印和什么不打印(我试图删除我的解释不需要的代码......):

@cities;

#Assume cities is loaded successfully
&loadCities(getFileHandle('cities.txt'), $NUM_CITIES, \@cities);
&printElements(getFileHandle('names.txt'), \@cities);

sub printElements{

    my $counter = 0;
    my $arraySize = scalar $_[1];

    # Prints fine!!!
    print @{$_[1][($counter)%$arraySize];

    while ((my $line = $_[0]->getline()) && $counter < 1000){

        #Doesn't print. Generates the above error
        print @{$_[1][($counter)%$arraySize];

        $counter += 1; …
Run Code Online (Sandbox Code Playgroud)

arrays perl scalar-context

3
推荐指数
1
解决办法
2162
查看次数

标签 统计

perl ×2

arrays ×1

json ×1

scalar-context ×1