my %h = (
decimalhex => sub{return sprintf("0x%x", shift)},
decimalbinary => sub{sprintf("%b", shift)},
hexdecimal => sub{return sprintf("%d", shift)},
);
This is not your originally posted code! (You have made changes in other places as well.) Here in the monastery, it is considered a very Bad Thing and is greatly Frowned Upon to make a change to one's post without citing the change in an update note of some kind. You can always change your post if you post as a registered user, as you did, and you are welcome to do so, but making changes without citation renders the comments and replies of the humble monks incoherent. By the method you have chosen to pose your confusing questions, you have actually sown more confusion! Please see How do I post a question effectively?.