> 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