с использованием данных: самосвал, выход XML показан ниже.perm массив дампера чтения
$VAR1 = {
'af' => {
'minimum' => {
'requested_bytes' => '8208'
},
'time' => [
{
'lastthreadtid' => '0x0000000030001100',
'exclusiveaccessms' => '0.017',
'meanexclusiveaccessms' => '0.017',
'threads' => '0'
},
{
'totalms' => '41.829'
}
],
'tenured' => [
{
'loa' => {
'freebytes' => '1314816',
'totalbytes' => '1314816',
'percent' => '100'
},
'freebytes' => '1314816',
'totalbytes' => '69219328',
'percent' => '1',
'soa' => {
'freebytes' => '0',
'totalbytes' => '67904512',
'percent' => '0'
}
},
{
'loa' => {
'freebytes' => '628664',
'totalbytes' => '685056',
'percent' => '91'
},
'freebytes' => '41796952',
'totalbytes' => '68537344',
'percent' => '60',
'soa' => {
'freebytes' => '41168288',
'totalbytes' => '67852288',
'percent' => '60'
}
}
],
'timestamp' => 'May 01 20:33:51 2016',
'intervalms' => '681.342',
'refs' => [
{
'weak' => '19116',
'maxSoftReferenceThreshold' => '32',
'phantom' => '0',
'dynamicSoftReferenceThreshold' => '20',
'soft' => '1709'
},
{
'weak' => '18490',
'maxSoftReferenceThreshold' => '32',
'phantom' => '0',
'dynamicSoftReferenceThreshold' => '19',
'soft' => '1709'
}
],
'gc' => {
'classunloading' => {
'classes' => '0',
'timevmquiescems' => '0.000',
'timetakenms' => '1.418',
'classloaders' => '0'
},
'finalization' => {
'objectsqueued' => '8'
},
'timesms' => {
'compact' => '0.000',
'mark' => '39.600',
'sweep' => '0.495',
'total' => '41.787'
},
'tenured' => {
'loa' => {
'freebytes' => '628664',
'totalbytes' => '685056',
'percent' => '91'
},
'freebytes' => '41805160',
'totalbytes' => '68537344',
'percent' => '60',
'soa' => {
'freebytes' => '41176496',
'totalbytes' => '67852288',
'percent' => '60'
}
},
'intervalms' => '681.373',
'type' => 'global',
'id' => '24',
'totalid' => '24',
'contraction' => {
'timetaken' => '0.000',
'amount' => '681984',
'newsize' => '68537344',
'reason' => 'excess free space following gc',
'type' => 'tenured'
}
},
'type' => 'tenured',
'id' => '24',
'pending-finalizers' => [
{
'reference' => '0',
'finalizable' => '8',
'classloader' => '0'
},
{
'reference' => '0',
'finalizable' => '8',
'classloader' => '0'
}
]
}
};
в perl-коде, записывая нижеследующую команду.
print Dumper($dataXML);
print $dataXML->{af}->{type}.",";
print $dataXML->{af}->{id}.",";
print $dataXML->{af}->{timestamp}.",";
print $dataXML->{af}->{intervalms}.",";
print $dataXML->{af}->{minimum}->{requested_bytes}.",";
print $dataXML->{af}->{time}[1]->{totalms}.",";
print $dataXML->{af}->{tenured}[1]->{freebytes}.",";
print $dataXML->{af}->{tenured}[1]->{totalbytes}.",";
print $dataXML->{af}->{tenured}[1]->{percent}.",";
print $dataXML->{af}->{tenured}[1]->{loa}[1]->{freebytes}.",";
print $dataXML->{af}->{tenured}[1]->{loa}[1]->{totalbytes}.",";
print $dataXML->{af}->{tenured}[1]->{loa}[1]->{percent}.",";
print $dataXML->{af}->{tenured}[1]->{soa}[1]->{freebytes}.",";
print $dataXML->{af}->{tenured}[1]->{soa}[1]->{totalbytes}.",";
print $dataXML->{af}->{tenured}[1]->{soa}[1]->{percent}.",";
print $dataXML->{af}->{tenured}[1]->{freebytes}[2].",";
print $dataXML->{af}->{tenured}[1]->{totalbytes}[2].",";
print $dataXML->{af}->{tenured}[1]->{percent}[2].",";
print $dataXML->{af}->{tenured}[1]->{loa}[2]->{freebytes}.",";
print $dataXML->{af}->{tenured}[1]->{loa}[2]->{totalbytes}.",";
print $dataXML->{af}->{tenured}[1]->{loa}[2]->{percent}.",";
print $dataXML->{af}->{tenured}[1]->{soa}[2]->{freebytes}.",";
print $dataXML->{af}->{tenured}[1]->{soa}[2]->{totalbytes}.",";
print $dataXML->{af}->{tenured}[1]->{soa}[2]->{percent}.",";
Ошибка:
Not an ARRAY reference
Я попытался несколько способов, чтобы получить значение каждого массива ключ-значение, но он показывает только последнее значение.
Проверьте самосвал и найдите '' 'для идентификации массивов. –
все места, в которых у вас есть '[1]' дважды в одной строке или '[1]', за которым следует '[2]', второе разыменование массива - это нечто, что не является массивом ref; для loa и soa, это есть ссылка, для остальных ключей это число. – ysth
также, я подозреваю, что у вас есть '{time} [1]' you mean '{time} [0]'. и, вероятно, вы имеете в виду первый набор строк для того, чтобы иметь '{tenured} [0]', а следующий набор '{tenured} [1]' – ysth