in reply to can I change hash keys or values directly

$ perl -le'my %x = "A" .. "F"; print "@{[ %x ]}"; $_ = lc for %x; prin +t "@{[ %x ]}";' C D A B E F C d A b E f

So, no, you can't modify hash keys directly.

However, you can do this:

$ perl -le'my %x = "A" .. "F"; print "@{[ %x ]}"; $x{ lc() } = delete +$x{ $_ } for keys %x; print "@{[ %x ]}";' E F A B C D c D a B e F