my %table = ( 'a' => '10', 'b' => '11', 'c' => '12', 'd' => '13', 'e' => '14', 'f' => '15', ); my @numbers = ('a0', '11', 'ff', '9084fe', '10'); foreach my $trial (@numbers) { my @digits = split //, $trial; my $result = 0; foreach my $digit (@digits) { $result *= 16; $result += $digit =~ /\d/ ? $digit : $table{lc($digit)}; } print "$trial is actually $result\n"; }