我又被困住了,需要一些帮助。像往常一样,这是我的克星——哈希。本质上,我正在尝试将 z/OS 大型机上的所有软件项目写入数据库。我已经设法发展到以下哈希:
$VAR1 = {
'Product' => {
'Unicenter CA-Deliver Output Management' => {
'vendorUniqueKeyRef' => 'CA',
'swUniqueKey' => 'RMO',
'description' => 'Unicenter CA-Deliver Output Management'
},
'Unicenter CA-JCLCheck Utility' => {
'vendorUniqueKeyRef' => 'CA',
'swUniqueKey' => 'JCLCHECK',
'description' => 'Unicenter CA-JCLCheck Utility'
},
'EREP Environmental Recording Edit Print' => {
'vendorUniqueKeyRef' => 'IBM',
'swUniqueKey' => 'EREP',
'ProductVersion' => {
'version' => '3',
'swUniqueKey' => '5658-260',
'name' => 'EREP Environmental Recording Edit Print',
'versionNumber' => '03'
},
'description' => 'EREP Environmental Recording Edit Print'
},
'SYSQL' => {
'vendorUniqueKeyRef' => 'SPLWDGRP',
'swUniqueKey' => 'SYSQL',
'ProductVersion' => {
'ProductVersionRelease' => {
'releaseNumber' => '01',
'swUniqueKey' => 'SYSQL-21',
'name' => 'SYSQL',
'release' => '1'
},
'version' => '2',
'swUniqueKey' => 'SYSQL-2',
'name' => 'SYSQL',
'versionNumber' => '02'
},
'description' => 'SYSQL'
},
'3270-PC File Transfer Program' => {
'vendorUniqueKeyRef' => 'IBM',
'swUniqueKey' => '3270PCFT',
'description' => '3270-PC File Transfer Program'
},
'Tivoli OMEGAMON XE on z/OS' => {
'vendorUniqueKeyRef' => 'IBM',
'swUniqueKey' => 'OMXEZO',
'ProductVersion' => {
'version' => '3',
'swUniqueKey' => '5698-A59',
'name' => 'Tivoli OMEGAMON XE on z/OS',
'versionNumber' => '03'
},
'description' => 'Tivoli OMEGAMON XE on z/OS'
},
'Tivoli OMEGAMON XE for Messaging for z/OS' => {
'vendorUniqueKeyRef' => 'IBM',
'swUniqueKey' => 'OMXEMES',
'description' => 'Tivoli OMEGAMON XE for Messaging for z/OS'
},
'DB2 Utilities Suite for z/OS' => {
'vendorUniqueKeyRef' => 'IBM',
'swUniqueKey' => 'DB2UTSU',
'ProductVersion' => {
'DB2 Utilities Suite for z/OS' => {
'swUniqueKey' => '5655-N97',
'version' => '9',
'versionNumber' => '09'
},
'DB2 Utilities Suite' => {
'swUniqueKey' => '5697-E98',
'version' => '7',
'versionNumber' => '07'
}
},
'description' => 'DB2 Utilities Suite for z/OS'
},
'UMB' => {
'vendorUniqueKeyRef' => 'CSC',
'swUniqueKey' => 'CSCUMB',
'description' => 'UMB'
}
}
};
最初,一切都很好,我有以下几点:
my $sw = $xmldoc->{'Catalog'}->{'Products'};
my %sw = %{ $sw->{'Product'} };
foreach my $product (keys %sw) {
print "Now processing $product\n";
my $version;
my $release;
my $description = $sw{$product}{'description'};
my $vendorUniqueKeyRef = $sw{$product}{'vendorUniqueKeyRef'};
my $swUniqueKey = $sw{$product}{'swUniqueKey'};
if ($sw{$product}{'ProductVersion'}) {
$version = $sw{$product}{'ProductVersion'}{'version'};
if ($sw{$product}{'ProductVersion'}{'ProductVersionRelease'}) {
$release =
$sw{$product}{'ProductVersion'}{'ProductVersionRelease'}
{'release'};
}
else {
$release = 0;
}
}
else {
$version = 0;
$release = 0;
}
my $fullVersion = "$version.$release";
print " ***************\n
The product is: $product\n
The description is: $description\n
The vendorUniqueKeyRef is: $vendorUniqueKeyRef\n
The ProductVersion is: $fullVersion\n
The swUniqueKey is: $swUniqueKey\n
***************\n";
}
但是,在使用严格时,我不断收到关于使用未初始化变量的错误。我意识到有些软件的版本像“.2”而不是“2.2”,然后发现我没有正确处理某些产品安装了两次不同版本的事实,这是我愚蠢地没有满足的。
我试图解决这个问题,却发现并非所有版本都有一个版本,我试图迎合这个问题,但前提是它们已经安装了一次......
我已经阅读了从 HoH 和 AoH 中获取数据的负载,但我不能正确地解决这个问题。
本质上,我正在尝试使用 DBD::ODBC(我已经为我的程序的其余部分工作)从这个散列中安装的所有软件的列表,无论它有一个版本、多个版本、版本和发布,多个版本,没有发布,多个版本……嗯,你明白了……
我将不胜感激任何人提供的任何帮助,以及对我当前风格和错误检查的任何建议。
提前致谢。