$colors-2 = $colors обе переменные указывают на один и тот же хэш (массив). Вместо этой строчки надо написать $colors-2 = merge({}, $colors), чтобы скопировать содержимое $colors в $colors-2, и тогда $colors-2 уже будет указывать на копию, а не на тот же самый хэш. Как-то так.