Perl:在标量上下文中访问XML :: Simple值

时间:2014-01-09 02:19:43

标签: perl xml-simple

给定以下XML::Simple对象,如何将其中一个键值复制到标量赋值中。以下输出来自print Dumper($xmlobjectreturnedfrommodule);

$VAR1 = {
          'Address2' => {},
          'City' => {},
          'EmailAddress' => {},
          'FName' => {},
          'PostalCode' => {},
          'LoginID' => {},
          'StateProvinceChoice' => {},
          'StateProvince' => {},
          'Phone' => {},
          'Country' => {},
          'Site' => {},
          'Address1' => {},
          'PhoneExt' => {},
          'LName' => {},
          'OrganizationName' => {},
          'Fax' => {}
        };

通常使用hashref我会使用以下内容:

print $xmlobjectreturnedfrommodule->{'LoginID'};

但它返回以下HASH(0x1e32640)而不是hashref中的键值。是XML::Simple引起了这种情况还是遗漏了什么?

1 个答案:

答案 0 :(得分:3)

你在做什么是正确的。检查一下:

#!/usr/bin/perl
use strict;
use warnings;

my $VAR1 = {
          'LoginID' => {},
        };

print $VAR1->{LoginID};

<强>输出:

HASH(0x8231818)

LoginID指向一个基本上为空的哈希引用。如果您修改下面的代码,那么您将获得一个空哈希:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my $VAR1 = {
          'LoginID' => {},
        };

print Dumper ($VAR1->{LoginID});

<强>输出:

$VAR1 = {};
  

但它返回以下HASH(0x1e32640)而不是hashref中的键值。有没有关于XML :: Simple的内容导致这种情况或者我遗漏了什么?

您打印它的方式(print $xmlobjectreturnedfrommodule->{'LoginID'};),无论hasref是否为空,它都不会返回hashref的键/值。它将始终返回HASH(0x1e32640)之类的内容,因为这是$xmlobjectreturnedfrommodule->{'LoginID'}所持有的内容。换句话说,{}是哈希引用。

要打印键/值,您需要使用for循环遍历散列并检索键/值。