Beginner Ruby question. What is the simplest way to change this code, but leaving the block completely intact, that eliminates the side effect?

x = lambda { |v| x = 2 ; v}
x.call(3)
#=> 3
x
#=> 2

This is the simplest example I could contrive to illustrate my issue, so "remove the assignment" or "don't assign the Proc to x" is not what I'm looking for.

I want to set local variables in a Proc (or lambda) that can be assigned without affecting the original enclosing scope. I could dynamically create a class or module to wrap the block, but that seems overkill for such a basic thing.

Equivalent Python to what I'm trying to do:

def x(v):
  x = 2  # this is a local variable, what a concept
  return v
Edit
Report