my @abc = ('a'..'z'); my %abc = map { ($abc[$_],$_) } (0..25); my @key = map { $abc{ lc() } } $key =~ /([a-z])/ig; #### my $new_c; if ($c =~ /[a-z]/i) { $new_c = $abc[($abc{lc($c)} + $key[$i]) % 26]; $new_c = uc($new_c) if ($c =~ /[A-Z]/); $result .= $new_c; $i = ($i + 1) % @key; } else { $result .= $c; }