不是test.pl第11行的

时间:2015-12-14 08:29:50

标签: xml perl

我的脚本显示不是第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>

1 个答案:

答案 0 :(得分:2)

  1. 请勿使用XML::Simple。它的文档告诉你
  2.   

    不鼓励在新代码中使用此模块。

    1. 使用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";
      }
      

      请注意,方括号和大括号之间的箭头是可选的。