> another solution: > > class Module > def module_function_subroutine(*names) > for m in names > module_function m > private_class_method m > end > end > end > > module M > def m2() puts "m2" end > def m1() m2 end > def m() m1 end > > module_function :m > module_function_subroutine :m1, :m2 > end > > M.m > M.m1 #=> NameError or NoMethodError Yes, it works, but your answer and answers from other members (thanks to all!) definitely convinced me of one thing: I must think in Ruby, I am not in PlainProcedureLand anymore :-) Andrea