I have run into the following problem with UNPACK: If I concatenate the packed values 
of a list to a string, when I use the unpack operation to put the values back into an 
array, the last element is missing.  I can only get around the problem by specifying 
the exact number of elements to unpack.  And if I don't have that available, I would 
have to do two unpack operations, the first one to find out how many elements are in 
the array of packed values, the second to get the last value.  This seems rather a 
waste to me.  Is there any way to solve this problem.  Your help would be greatly 
appreciated.  Thanks in advance.


The following program illustrates the problem I am having:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$TBLXCOL_FORMAT = 'I/a*';
$lines[0] = "CLASSCOUNT         PSOPRDEFN               8     2 SMALLINT N";
$lines[1] = "OPERPSWD           PSOPRDEFN               9    32 CHAR     N";
$lines[2] = "ENCRYPTED          PSOPRDEFN              10     2 SMALLINT N";
$lines[3] = "SYMBOLICID         PSOPRDEFN              11     8 CHAR     N";
for ($i=0;$i<4;$i++) {
   ($column, $table) = split / +/, $lines[$i];
   if (!exists($tblxcol{uc($table)})) {
      $tblxcol{uc($table)} = pack ($TBLXCOL_FORMAT, $column);
   }
   else {
      $tblxcol{uc($table)} .= pack ($TBLXCOL_FORMAT, $column);
   }
}
print "1st example\n";
@array = unpack $TBLXCOL_FORMAT x 500, $tblxcol{PSOPRDEFN};
printf ("Array size: %ld\n", $#array+1);
$i = 0;
foreach $item (@array) {
   $i++;
   print "$i   $item\n";
}
print "\n2nd example\n";
@array = unpack $TBLXCOL_FORMAT x ($#array+1), $tblxcol{PSOPRDEFN};
$i = 0;
foreach $item (@array) {
   $i++;
   print "$i   $item\n";
}
exit 0;


Reply via email to