我的脚本显示不是第11行的标量引用
我的脚本是
#!/usr/bin/perl -w
@files = <*.xml>;
foreach $file (@files) {#!/usr/bin/perl
# use module
use XML::Simple;
# create object
$xml = new XML::Simple;
# read XML file
$data = $xml->XMLin("$file");
# access XML data
foreach my $entry (@{$data->{result}->{entries}->{entry}}){
print "$file $data->{result}->{entries}->{entry}->{ip} $data->{result}->{entries}->{entry}->{mac}\n";
}}
我在下面的文件夹中有一个xml文件
我想列出所有文件中的所有ips和mac地址,我正在尝试使用foreach我的$ entry。
<?xml version="1.0"?>
-<response status="success">
-<result>
<max>1000</max>
<total>2</total>
<timeout>1800</timeout>
<dp>dp0</dp>
-<entries>
-<entry>
<status> c </status>
<ip>10.0.0.1</ip>
<mac>00:00:oo:88:70:41</mac>
<ttl>1590</ttl>
<interface>ethernet1/2</interface>
<port>ethernet1/2</port>
</entry>
-<entry>
<status> c </status>
<ip>17.0.0.1</ip>
<mac>00:0f:00:00:00:42</mac>
<ttl>1500</ttl>
<interface>ethernet1/4</interface>
<port>ethernet1/4</port>
</entry>
</entries>
</result>
</response>
答案 0 :(得分:2)
不鼓励在新代码中使用此模块。
使用Data::Dumper可视化复杂的数据结构。
use Data::Dumper;
print Dumper($data);
您会看到entry
是数组引用,而不是哈希。你需要说出你想要的数组元素:
print $data->{result}{entries}{entry}[0]{ip}, ' ',
$data->{result}{entries}{entry}[0]{mac}, "\n";
或迭代所有这些:
for my $entry (@{ $data->{result}{entries}{entry} }) {
print $entry->{ip}, ' ', $entry->{mac}, "\n";
}
请注意,方括号和大括号之间的箭头是可选的。