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;