One point of clarification, $1 and the other $n variables that get set from
a regex are NOT globals.

They are dynamically scoped.

Run something like this to prove it:

#!/usr/bin/env ruby

def test_scope
  "in:the:scope:of:a:silly:method:kthx" =~
/(.*):(.*):(.*):(.*):(.*):(.*):(.*)/
  puts $7
end

"a:test:to:prove:dynamic:scope:for:regex" =~
/(.*):(.*):(.*):(.*):(.*):(.*):(.*)/

puts $7
test_scope
puts $7


you will get:

regex
kthx
regex

But $almostanythingelse IS global... ahh, Ruby...



On Fri, Jan 9, 2009 at 11:29 PM, Jos Backus <[email protected]> wrote:

>
> On Fri, Jan 09, 2009 at 12:16:10PM -0600, Luke Kanies wrote:
> > It does create a local copy -- but it only creates the local copy
> > after $6 has been set to a single value (the last one).  Remember that
> > the setcode block is lazy-evaluated; it's evaluated when the fact
> > value is asked for, rather than when the fact is defined.
>
> Okay. Because $6 is a global variable there's only one value associated
> with
> it, and it is that value that is referenced when the setcode block is
> called.
> In the case of the `local' variable below, the block/closure "remembers"
> its
> instance value from the time of the definition but in the case of the
> `$global' variable there is only one instance, whose value at the end is
> common to all closures.
>
> The following code demonstrates the difference:
>
>    lizzy:/tmp% cat x
>    class Foo
>      def setcode(&block)
>        @block = block
>      end
>      def value
>        @block.call
>      end
>    end
>
>    a = []
>
>    3.times do |i|
>      a << f = Foo.new
>      local, $global = i, i
>      f.setcode do
>        [local, $global]
>      end
>    end
>
>    a.each do |elem|
>      p elem.value
>    end
>    lizzy:/tmp% ruby x
>    [0, 2]
>    [1, 2]
>    [2, 2]
>    lizzy:/tmp%
>
> Hope I got that right. Thanks again, Luke.
>
> --
> Jos Backus
> jos at catnook.com
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to