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