# requires Ruby 3.1 or newer
# *** before: ***
def wrap_old(&block)
puts "before"
block.call
puts "after"
end
def run_old(&block)
wrap_old(&block)
end
# *** in version 3.1: ***
def wrap(&)
puts "before"
yield
puts "after"
end
def run(&)
wrap(&) # the anonymous block is forwarded without ever being named
end
run { puts "work" }