my %SWITCH = ( CAT => 0b00001, DOG => 0b00010, HAMSTER => 0b00100, FERRIT => 0b01000, FISH => 0b10000); my $petInput = 2; my @PETS; my $binPet = unpack("B32", pack("N", $petInput)); $binPet =~ s/^0+(?=\d)//; # gets rid of leading zeros printf "%s%bn%s", "\n", $binPet, "\n"; # at this point $binPet unfortunately contains "0b1010" # rather than 0b10 as expected, so I'm doing something wrong # in my pack/unpack apparently for (keys %SWITCH) { if ($binPet & $SWITCH{$_}){push (@PETS, $_);} } foreach (@PETS){print $_."\n";}