# Global array of hashes

**URL:** <https://www.ruby-forum.com/t/global-array-of-hashes/134391>\
**Category:** Ruby\
**Created:** [April 10, 2008, 1:45pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391 "2008-04-10T13:45:38Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![tcblues](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@tcblues](https://www.ruby-forum.com/u/tcblues)\
**Post date:** [April 10, 2008, 1:45pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391/1 "2008-04-10T13:45:38Z")

</div>

I’m doing this:

$globvar=Array.new()  
$globvar[0]=“mygenericvalue”  
localvar=$globvar  
localvar[0]=“mylocalvalue”  
puts $globvar

And the result for $globvar is “mylocalvalue”

How can I assign to localvar only the value of $globvar and not the  
memory possition??

Thanks

---

<div class="post-metadata">

**Author:** ![tcblues](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@tcblues](https://www.ruby-forum.com/u/tcblues)\
**Post date:** [April 10, 2008, 1:52pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391/2 "2008-04-10T13:52:14Z")

</div>

On Thu, Apr 10, 2008 at 6:45 AM, Mario R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> How can I assign to localvar only the value of $globvar and not the  
> memory possition??
> 
> Thanks

This seems to work…

localvar = $globvar.dup

Todd

---

<div class="post-metadata">

**Author:** ![tcblues](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@tcblues](https://www.ruby-forum.com/u/tcblues)\
**Post date:** [April 10, 2008, 1:57pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391/3 "2008-04-10T13:57:03Z")

</div>

But not in this case:

$globvar=Array.new()  
myHash=Hash.new()  
myHash[“oneValue”]=“mygenericvalue”  
$globvar[0]=myHash

localvar=$globvar.dup

localvar[0][“oneValue”]=“mylocalvalue”

puts $globvar

---

<div class="post-metadata">

**Author:** ![tcblues](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@tcblues](https://www.ruby-forum.com/u/tcblues)\
**Post date:** [April 10, 2008, 2:09pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391/4 "2008-04-10T14:09:21Z")

</div>

On Thu, Apr 10, 2008 at 6:57 AM, Mario R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> puts $globvar

In this case, you create a new array that holds the same Hash object.  
You have to dup the Hash as well.

hth,  
Todd

---

<div class="post-metadata">

**Author:** ![tcblues](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@tcblues](https://www.ruby-forum.com/u/tcblues)\
**Post date:** [April 10, 2008, 2:07pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391/5 "2008-04-10T14:07:31Z")

</div>

Hi –

On Thu, 10 Apr 2008, Mario R. wrote:

> puts $globvar

Try this:

irb(main):001:0\> a = []  
=\> []  
irb(main):002:0\> h = {}  
=\> {}  
irb(main):003:0\> h[“one”] = “generic”  
=\> “generic”  
irb(main):004:0\> a[0] = h  
=\> {“one”=\>“generic”}  
irb(main):005:0\> l = Marshal.load(Marshal.dump(a))  
=\> [{“one”=\>“generic”}]  
irb(main):006:0\> l[0][“one”] = “local”  
=\> “local”  
irb(main):007:0\> a  
=\> [{“one”=\>“generic”}]

(using globals if you absolutely must… but that’s another story 🙂

David

---

<div class="post-metadata">

**Author:** ![tcblues](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/db5fbb/32.png) [@tcblues](https://www.ruby-forum.com/u/tcblues)\
**Post date:** [April 10, 2008, 2:25pm UTC](https://www.ruby-forum.com/t/global-array-of-hashes/134391/6 "2008-04-10T14:25:36Z")

</div>

Ok.

I was thinking that maybe it could be an easier way…

Thank you.
