Macro question (create variables)

bertschi thank you for the detailed explanation.

After some searching (specifically this and this topics were useful) and some experimenting I got solution for multiple arguments:

foo(x) = "$x-$x" 

macro moo2(args...) 
    v = [:($x = foo($(string(x)))) for x in args]
    return esc(Expr(:block, v...))
end

@moo2 w1 w2
@show w1 w2;

julia> 

w1 = "w1-w1"
w2 = "w2-w2"

Now, can anybody explain me why do I need this esc here in the return statement?