Macro that construct function names and call them

Yes and no. With

macro dis_do(arg1, l)
    return Expr(:call, Symbol("do_", l, "!"), (esc(arg1)))
end

you can do @dis_do(arg1, 3) but it only works with a literal second argument since macros cannot see argument values (there are no values at the time of macro expansion). I.e., you cannot do

l = 3
@dis_do(arg1, l)