$ k1 - переменная, k1 - голое слово .
perl -e '%h = (1 => 2, "k1" => 3); $k1 = 1; printf "%d %d\n", $h{$k1}, $h{k1}'
2 3
Тогда, если вы используете хеш-ссылку, будьте осторожны, чтобы использовать скалярные переменные для их хранения.
perl -e '$h = {1 => 2, "k1" => 3}; $k1 = 1; printf "%d %d\n", $h->{$k1}, $h->{k1}'
2 3
Если вы написали что-то вроде ничего не будет работать, как ожидалось:
perl -e '%h = {1 => 2, "k1" => 3}; $k1 = 1; printf "%d %d\n", $h->{$k1}, $h->{k1}'
0 0
Если голое слово не является проблемой (возможно, так оно и есть), то вам следует тщательно проверить, как вы построили свою карту.