On Jan 30, 10:15 am, "Tim Pease" <tim.pe... / gmail.com> wrote: >This is an utter kludge and I would not recommend using it in any > production code, but here it is ... oh, and it will only work for this > very specific case :/ [snip] Very tricky! Let's make it a little shorter and more robust: class A def say_hi m = %r/([^:]+):(\d+)/.match caller.first return if m.nil? line = IO.readlines( m[1] )[ m[2].to_i - 1 ] return if line.nil? puts "Hi, I am #{line[/\S+(?=.say_hi)/] || '(unknown)'}" end end a = A.new b = a c = [ a ] d = { :foo=>c[0] } a.say_hi #=> Hi, I am a b.say_hi #=> Hi, I am b c[0].say_hi #=> Hi, I am c[0] d[:foo].say_hi #=> Hi, I am d[:foo] x=0 y = c[x].say_hi #=> Hi, I am c[x] c[x].send( :say_hi ) #=> Hi, I am (unknown)