我正在尝试打印嵌套数据结构的元素:
$VAR1 = {
'SOAP:Body' => {
'ns1:MT_DF_AssetMaster_Response' => {
'SUBNUMBER' => {},
'ASSETCREATED' => {
'SUBNUMBER' => {},
'ASSET' => {},
'COMPANYCODE' => {}
},
'RETURN' => {
'PARAMETER' => 'timedependentdata',
'MESSAGE_V2' => {},
'ID' => 'BAPI1022',
'MESSAGE_V1' => 'HW5790',
'ROW' => '0',
'TYPE' => 'E',
'FIELD' => 'plate_no',
'LOG_NO' => {},
'MESSAGE_V3' => {},
'SYSTEM' => 'xxx',
'MESSAGE' => 'Invalid date transferred for field xxx:',
'MESSAGE_V4' => {},
'NUMBER' => '041',
'LOG_MSG_NO' => '000000'
},
'xmlns:ns1' => 'urn:ariba.com:xi:OnDemand:Asset',
'ASSET' => {},
'COMPANYCODE' => {}
}
},
'xmlns:SOAP' => 'http://schemas.xmlsoap.org/soap/envelope/',
'SOAP:Header' => {}
};
print "$data->{SOAP:Body}->{ns1:MT_DF_AssetMaster_Response}->{ASSETCREATED}=>{ASSET}\n";
但是我收到语法错误:
./asset_creation.pl第85行的语法错误,靠近“{SOAP:”
我该如何解决这个问题?
答案 0 :(得分:0)
你必须写这样的东西
my $asset = $data->{'SOAP:Body'}{'ns1:MT_DF_AssetMaster_Response'}{ASSETCREATED}{ASSET};
print %$asset ? "Asset is NOT empty\n" : "Asset is empty\n";
答案 1 :(得分:0)
以下是通过引用进行哈希查找的语法:
REF->{IDENTIFIER}
REF->{EXPR}
ns1:MT_DF_AssetMaster_Response
既不是有效的标识符,也不是有效的表达式。取代
->{ns1:MT_DF_AssetMaster_Response}
与
->{'ns1:MT_DF_AssetMaster_Response'}
答案 2 :(得分:0)
Perl允许在下标中使用数组或散列的表达式。例如,变量:
$array[ $i ]
或者添加的结果:
$array[ $i + $offset ]
或者其他什么
$array[ cos( $i ) ]
哈希是一样的:
$hash{ $key }
点仍然是字符串连接运算符:
$hash{ $key . $prefix }
当你一起洗脑时很难发现:
$hash{first.last}
在这种情况下,:仍然是命名空间分隔符的一部分。 Perl认为你在括号中没有完成这个表达式所以它会抱怨:
$hash{ SOAP:Body } # !!! Error
答案 3 :(得分:-1)
SOAP:Body
:如果不引用哈希键,则不能使用:
:
print $data->{'SOAP:Body'}->{'ns1:MT_DF_AssetMaster_Response'}
您还应该删除print语句中变量名称周围的" "
。 hashref-dereferencing不起作用。你的输出就像是
HASH(0x123456)->{SOAP:Body}->{ns1:MT_DF_AssetMaster_Response}
...但如果第85行不是print
命令,则可能还有其他错误。