$t = unpack('C', $foo); if ($t == 0) { $v = unpack('C', substr($foo, 1)) } elsif ($t == 1) { $v = unpack('S', substr($foo, 1)) } elsif ($t == 2) { $v = unpack('L', substr($foo, 1)) } elsif ($t == 3) { $v = unpack('Z*', substr($foo, 1)) } #### my @unpack_types = qw( C S L Z* ); $t = unpack('C', $foo); $v = unpack($unpack_types[$t], substr($foo, 1)); #Is $t always a number?