[Pdx-pm] Different data structures for Hash of array, same code (mostly)
Daniel Herrington
dherrington at robertmarktech.com
Wed Nov 18 07:12:07 PST 2009
All,
Sorry if this is a double post, but I didn't get a confirmaiton that my
last email made it.
I have two code snippets that should do the same thing, but do not
produce the same data structure. I can't seem to figure out why.
Code A:
...
if ($boxNameH{$boxName}) {
#If we already have a list created
my $refBoxName = $boxNameH{$boxName};
my @derefArray = @$refBoxName;
$derefArray[0]++;
push (@derefArray, $jobName);
$boxNameH{$boxName} = \@derefArray;
$caJIL{$jobName}{"$jilCommand"} = "$jilValue";
} else {
#We're the first one
my @derefArray;
$derefArray[0] = 1;
push (@derefArray, $jobName);
$boxNameH{$boxName} = \@derefArray;
$caJIL{$jobName}{"$jilCommand"} = "$jilValue";
}
...
Using Dumper, the data in %boxNameH is:
3108$VAR1 = {
'CPO_TNC_WCONV0' => [
2,
'CPO_TNC_WCONVERSION_CHMOD',
'CPO_TNC_WCONVERSION_SETUP'
],
'CURRENTLINK_25' => [
1,
'CURRENT_LINK_25'
],
...
Code B:
...
my %newBoxNameH;
foreach (@arBoxNames) {
my $boxName = $_;
my $newBoxName;
my @jobNamesList;
if ($ref_hlqMap->{$boxName}) {
$newBoxName = $ref_hlqMap->{$boxName} ; } else {
$newBoxName = $boxName;
}
print __LINE__ . " $newBoxName\n";
my $ref_arJobNamesB = $ref_boxNameH->{$boxName};
my @arJobNamesB = $ref_arJobNamesB;
foreach (@arJobNamesB) {
my $jobName = $_;
my $newJobName;
if ($ref_hlqMap->{$jobName}) {
$newJobName = $ref_hlqMap->{$jobName};
} else {
$newJobName = $jobName;
}
if ($newBoxNameH{$newBoxName}) {
my $ref_arJobNames = $newBoxNameH{$newBoxName};
my @arJobNames = @$ref_arJobNames;
push (@arJobNames,$newJobName);
$newBoxNameH{$newBoxName} = \@arJobNames;
} else {
my @arJobNames;
push (@arJobNames,$newJobName);
$newBoxNameH{$newBoxName} = \@arJobNames;
}
}
...
289$VAR1 = {
'CURRENTLINK_25' => [
[
1,
'CURRENT_LINK_25'
]
],
'CPO_TNC_WCONV0' => [
[
2,
'CPO_TNC_WCONVERSION_CHMOD',
'CPO_TNC_WCONVERSION_SETUP'
]
]
};
...
You can see in Code B's dump that the list is actually embedded another
layer down as if Code B produces a Hash of Array of Array. I just can't
seem to figure out why this is happening?
thanks,
--
Daniel B. Herrington
Director of Field Services
Robert Mark Technologies
dherrington at robertmarktechnologies.com
o: 651-769-2574
m: 503-358-8575
More information about the Pdx-pm-list
mailing list