my %h = ( decimalhex => sub{return sprintf("0x%x", shift)}, decimalbinary => sub{sprintf("%b", shift)}, hexdecimal => sub{return sprintf("%d", shift)}, ); my $var = ; print $h{decimalhex}($var), "\n"; print $h{decimalbinary}($var), "\n"; print $h{hexdecimal}($var), "\n"; Basically, this script converts numbers into different formats(binary and hex), when I take away shift: ___OUTPUT___ 5 0x0 0 #### ___OUTPUT___ 5 0x5 101 #### ___OUTPUT___ 5 0x5 101