私はまた立ち往生していて、助けが必要です。いつものように、それは私の宿敵です-ハッシュ。基本的に、私はデータベース、つまりaz/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";
}
ただし、strictを使用しているときに、初期化されていない変数を使用するとエラーが発生し続けました。一部のソフトウェアには「2.2」ではなく「.2」のようなバージョンがあることに気付き、一部の製品が異なるバージョンで2回インストールされているという事実を適切に処理していないことに気付きました。これは、私が愚かに対応していなかったことです。
私はそれを修正しようとしましたが、すべてのバージョンのバージョンに、私が対応しようとしたリリースがあるわけではなく、一度インストールされた場合に限ります......。
HoHとAoHからデータを取得する際の負荷を読みましたが、これを正しく理解することはできません。
基本的に、DBD :: ODBC(プログラムの残りの部分ですでに作業しています)を使用して、このハッシュからデータベースにインストールされたすべてのソフトウェアのリストを取得しようとしています。リリース、複数のバージョン、リリースなし、複数のバージョン......よくわかります......。
私の現在のスタイルとエラーチェックについてのアドバイスと同じくらい、誰もが喜んでくれる助けをいただければ幸いです。
前もって感謝します。