#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %flagvalues = ( R => 2**6, T => 2**5, B => 2**4, I => 2**3, F => 2**2, L => 1, ); my $flags = 'RRTBLXUC'; print flagValue($flags); sub flagValue{ $flags = shift; my $weight; my %unique_flags = map { $_ => undef } split //, $flags; for my $flag (keys %unique_flags){ $weight += exists $flagvalues{$flag} ? $flagvalues{$flag} : 0; # print "$flag -> $weight\n"; } return $weight; }