【问题标题】:Perl array has values but unable to access themPerl 数组有值但无法访问它们
【发布时间】:2014-10-22 09:51:29
【问题描述】:

我试过了,我在互联网上搜索过,现在我没有想法。 我有一个包含元素的数组。 我使用 Dumper 函数来确保元素存在,但是,当我尝试访问单个项目时,我没有得到预期的输出。

请有人帮忙。

这是代码

print "<pre>Array: ".Dumper(@configFiles)."\n";
print "First: ".$configFiles[0]."\n";
print "Second: ".$configFiles[1]."</pre>";

下面是输出

Array: $VAR1 = [
      'searchTables.json',
      'NAM_database.json'
    ];

First: ARRAY(0x9a8f60)
Second:   

如果您想知道数组元素是如何分配的,我会读取一个 json 文件,然后使用下面的函数对其进行转换。

sub parseJson{
    my ($jfilename) = @_;
    if(-e "$jsoncPath/$jfilename"){
        return decode_json($json_data);
    }else{

    }
}

查看下面的json

[
   "searchTables.json",
   "NAM_database.json"
]

我还尝试了如下所示的取消引用,但没有成功

print "<pre>First: ".@{$configFiles[0]}."</pre>";

把下面的画面告诉我。

First: 2

【问题讨论】:

  • 提示:如果要转储数组或哈希,最好传递一个引用。 Dumper(\@configFiles).
  • 感谢您的注意,这可以更好地了解数组中的内容。

标签: arrays json perl


【解决方案1】:

decode_json 返回对数组的引用,而不是实际数组。 应该是:

my $configFiles = parseJson($jfilename);
print "<pre>Array: " . Dumper($configFiles) . "\n";
print "First: " . $configFiles->[0] . "\n";
print "Second: " . $configFiles->[1] . "</pre>";

print "<pre>Array: " . Dumper(@configFiles) . "\n";
print "First: " . $configFiles[0][0] . "\n";
print "Second: " . $configFiles[0][1] . "</pre>";

【讨论】:

  • 这有效$configFiles[0]-&gt;[0] 以及以下@{$configFiles[0]}[0]
  • $configFiles[0]-&gt;[0] 可以缩短为$configFiles[0][0]
【解决方案2】:

@configFiles 不是您认为/期望的数组。第一个元素是一个数组引用,你需要取消引用它才能访问数组:

print "ARRAY: @{$configFiles[0]}\n";

【讨论】:

  • 我试过这个没有成功print "&lt;pre&gt;First: ".@{$configFiles[0]}."&lt;/pre&gt;";给我下面的场景。 First: 2
  • @AndreDixon 在标量上下文中,数组返回它的大小,而不是它的元素。使用连接运算符. 将数组置于标量上下文中。如果你只使用插值就可以了:print "&lt;pre&gt;First: @{$configFiles[0]}&lt;/pre&gt;"
  • 或者只是将连接点更改为逗号 - print "&lt;pre&gt;First: ", @{$configFiles[0]}."&lt;/pre&gt;";
猜你喜欢
  • 2019-09-09
  • 2019-07-20
  • 2019-01-06
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2014-04-08
相关资源
最近更新 更多