def from_str(name, target=TOPLEVEL_BINDING, options={})
if name.nil?
from_binding(target)
elsif name.to_s =~ /(.+)\#(\S+)\Z/
context, meth_name = $1, $2
from_module(target.eval(context), meth_name)
elsif name.to_s =~ /(.+)\.(\S+)\Z/
context, meth_name = $1, $2
from_obj(target.eval(context), meth_name)
elsif options[:instance]
from_module(target.eval("self"), name)
elsif options[:methods]
from_obj(target.eval("self"), name)
else
from_str(name, target, :instance => true) or
from_str(name, target, :methods => true)
end
end