my %test_vals;
@test_vals{ @TEST_FLD } = unpack $TEST_REC_PACK, $rec;
####
my @TEST_FLD = ();
my $TEST_REC_PACK = q{};
my @TEST_REC_PACK_FLDS = (
status => 'n ', # 0
time => 'n ', # 2
date => 'N ', # 4
code => 'a16', # 8 key
msid => 'a10', # 24 key);
my $TEST_REC_LEN = 34;
# split pack-spec & fld names (one-line-ish)
my $odd=0;
($odd^=1) ? push @TEST_FLD,$_ : ($TEST_REC_PACK.=$_)
for (@TEST_REC_PACK_FLDS);
# split pack-spec & fld names (using a sub)
($TEST_REC_PACK,@TEST_FLD) =
Split_pack_flds_spec(@TEST_REC_PACK_FLDS);
sub Split_pack_flds_spec {
my $spec;
my @fld;
my $odd = 0;
for (@_) {
if ($odd = !$odd) {
push @fld,$_;
}
else {
$spec .= $_;
}
}
return ($spec,@fld);
}
####
print 'fields = (',join(',',@TEST_FLD),")\n";
print "pack spec = \"$TEST_REC_PACK\"\n";
my $rec = "\x{00}\x{7B}\x{06}\x{B3}\x{01}\x{32}\x{1A}\x{83}"
.'code_value------msid_value';
my %test_vals;
@test_vals{ @TEST_FLD } = unpack $TEST_REC_PACK, $rec;
my ($key,$val);
while (($key,$val)=each(%test_vals)) {
printf " %6s => %s\n",$key,$val;
}