![](/img/trans.png)
[英]Why do I get a syntax error when I want to print to a handle in a hash key?
[英]Why do I get a syntax error when I try to print a nested hash that has keys containing colons?
我正在尝试打印嵌套数据结构的元素:
$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:”
我怎样才能解决这个问题?
你必须写这样的东西
my $asset = $data->{'SOAP:Body'}{'ns1:MT_DF_AssetMaster_Response'}{ASSETCREATED}{ASSET};
print %$asset ? "Asset is NOT empty\n" : "Asset is empty\n";
以下是通过引用进行哈希查找的语法:
REF->{IDENTIFIER}
REF->{EXPR}
ns1:MT_DF_AssetMaster_Response
既不是有效的标识符,也不是有效的表达式。 更换
->{ns1:MT_DF_AssetMaster_Response}
与
->{'ns1:MT_DF_AssetMaster_Response'}
Perl允许在下标内的表达式为数组或哈希。 例如,一个变量:
$array[ $i ]
或加法的结果:
$array[ $i + $offset ]
或者其他的东西
$array[ cos( $i ) ]
哈希值也一样:
$hash{ $key }
点仍然是字符串连接运算符:
$hash{ $key . $prefix }
当裸词混在一起时,很难发现:
$hash{first.last}
在这种情况下,:仍然是名称空间分隔符的一部分。 Perl认为大括号中的表达式还不够用,所以它抱怨:
$hash{ SOAP:Body } # !!! Error
SOAP:Body
必须被引用:本:
无报价哈希键不能使用:
print $data->{'SOAP:Body'}->{'ns1:MT_DF_AssetMaster_Response'}
您还应该在打印语句中删除变量名周围的" "
。 否则,hashref取消引用将不起作用。 您的输出将类似于
HASH(0x123456)->{SOAP:Body}->{ns1:MT_DF_AssetMaster_Response}
...但是如果第85行不是print
命令,您可能仍然会遇到另一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.