This freezes the given value which affects the caller. If to be used at all, the returned value from freeze should be stored in the scope (i.e. a copy). This however means that all values are copied (arrays too). And... since values can be unfrozen, and arrays and hashes are not transitively protected, this is a false safety.