IMO, if you really want clean in the code readability sense, stop trying to transliterate code between languages, and go the usual way: foo = [ 'something', 'or', 'other'] def mfoo(arg) # do stuff with a copy of arg. return arg end foo = mfoo(foo) If you really want foo clobbered, I'd possibly either add an Array#mfoo! method, or add it as a singleton to foo. Yes, I'm -that- evil ;) And resentful of clobbering objects... David