>  x = lambda do |*args|
>    if args.size == 5
>      # call another block
>      yield *args.map{|x| x.gsub(/es$/, '') }
>    end
>  end

You are using 2 variables with the same name (x) in the same
scope. So, in fact, you are only using 1 variable...

gegroet,
Erik V. - http://www.erikveen.dds.nl/