From: nobu@... Date: 2021-05-20T07:52:09+00:00 Subject: [ruby-core:103908] [Ruby master Bug#17767] `Cloned ENV` inconsistently returns `ENV` or `self` Issue #17767 has been updated by nobu (Nobuyoshi Nakada). Cloned `ENV` accesses/modifies the process global environment variables, as well as `ENV` itself, however the codes we found expect these are different. So I propose `ENV.clone` and `ENV.dup` should raise an exception. ---------------------------------------- Bug #17767: `Cloned ENV` inconsistently returns `ENV` or `self` https://bugs.ruby-lang.org/issues/17767#change-92037 * Author: kachick (Kenichi Kamiya) * Status: Open * Priority: Normal * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin20] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- GH-PR: https://github.com/ruby/ruby/pull/4344 Is this an expected behavior? ���� ```console $ ruby -v ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin20] ``` ```ruby cloned_env = ENV.clone p ENV.each_key{}.equal?(ENV) #=> true p cloned_env.each_key{}.equal?(cloned_env) #=> true ENV.delete('TEST') err = ENV.fetch('TEST') rescue $! p err.receiver.equal?(ENV) #=> true err = cloned_env.fetch('TEST') rescue $! p err.receiver.equal?(cloned_env) #=> false ENV['TEST'] = 'TRUE' p ENV.select!{ false }.equal?(ENV) #=> true cloned_env['TEST'] = 'TRUE' p cloned_env.select!{ false }.equal?(cloned_env) #=> false ``` I guess ruby don't care `Cloned ENV` objects. Yes, anyone basically do not write these code. But the behaviors looks weird to me. ���� Should block to clone? Should return ENV? Should return self? I think `they return self` makes consistently behaviors and does not break compatibilities. So I have created this PR ���� -- https://bugs.ruby-lang.org/ Unsubscribe: