I might do the initializationI'd initialize with something closer to this (although I might inline the two arrays):
plain_alphabet = ('a'..'z').to_a
cipher_alphabet = ('A'..'Z').to_a.rotate KEY
$caesar_map = Hash[plain_alphabet.zip cipher_alphabet]
The en/decryption (which could likely be handled by the built-in tr method) might look more like:
plaintext.split("").inject("") {|s, c| s << $caesar_map[c]}
I'd put the whole thing in a class, too; skip the global.