# Overriding ENV\[\]

**URL:** <https://www.ruby-forum.com/t/overriding-env/193008>\
**Category:** Ruby\
**Created:** [August 9, 2010, 11:02pm UTC](https://www.ruby-forum.com/t/overriding-env/193008 "2010-08-09T23:02:52Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jos\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/779978/32.png) [@Jos\_B](https://www.ruby-forum.com/u/Jos_B)\
**Post date:** [August 9, 2010, 11:02pm UTC](https://www.ruby-forum.com/t/overriding-env/193008/1 "2010-08-09T23:02:52Z")

</div>

$ cat x  
#!/usr/bin/env ruby  
class \<\< ENV  
define\_method(:[], lambda { |v| v.upcase })  
end  
p ENV[‘FOO’]  
$ FOO=foo ./x  
“FOO”  
$

But what if I want to call the original ENV[] inside the new method?

---

<div class="post-metadata">

**Author:** ![Jos\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/779978/32.png) [@Jos\_B](https://www.ruby-forum.com/u/Jos_B)\
**Post date:** [August 10, 2010, 12:04am UTC](https://www.ruby-forum.com/t/overriding-env/193008/2 "2010-08-10T00:04:20Z")

</div>

On Mon, Aug 9, 2010 at 11:01 PM, Jos B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> But what if I want to call the original ENV[] inside the new method?  
> You can use alias\_method like this:

irb(main):001:0\> a = [1,2,3]  
=\> [1, 2, 3]  
irb(main):005:0\> class \<\< a  
irb(main):006:1\> alias\_method :old, :[]  
irb(main):007:1\> end  
=\> #\<Class:#Array:0x2932038\>  
irb(main):008:0\> a.old(0)  
=\> 1  
irb(main):009:0\> class \<\< a  
irb(main):010:1\> def   
irb(main):011:2\> old(val).to\_s.upcase  
irb(main):012:2\> end  
irb(main):013:1\> end  
=\> nil  
irb(main):014:0\> a[0]  
=\> “1”

I tested with an array, but ENV should work too.

---

<div class="post-metadata">

**Author:** ![Jos\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/779978/32.png) [@Jos\_B](https://www.ruby-forum.com/u/Jos_B)\
**Post date:** [August 10, 2010, 2:30am UTC](https://www.ruby-forum.com/t/overriding-env/193008/3 "2010-08-10T02:30:04Z")

</div>

On Tue, Aug 10, 2010 at 06:58:00AM +0900, Jess Gabriel y Galn wrote:

> irb(main):009:0\> class \<\< a  
> irb(main):010:1\> def   
> irb(main):011:2\> old(val).to\_s.upcase  
> irb(main):012:2\> end  
> irb(main):013:1\> end  
> =\> nil  
> irb(main):014:0\> a[0]  
> =\> “1”
> 
> I tested with an array, but ENV should work too.

This works, thanks Jesús. I tried

```
alias_method :old_[], :[]

```

which produces a syntax error. I should have tried a little harder.
