3 package Devel::REPL::Plugin::FindVariable;
4 # ABSTRACT: Finds variables by name
6 our $VERSION = '1.003027';
8 use Devel::REPL::Plugin;
9 use namespace::autoclean;
12 my ($self, $name) = @_;
14 return \$self if $name eq '$_REPL';
16 # XXX: this code needs to live in LexEnv
17 if ($self->can('lexical_environment')) {
18 return \( $self->lexical_environment->get_context('_')->{$name} )
19 if exists $self->lexical_environment->get_context('_')->{$name};
22 my $sigil = $name =~ s/^([\$\@\%\&\*])// ? $1 : '';
24 my $default_package = $self->can('current_package')
25 ? $self->current_package
27 my $package = $name =~ s/^(.*)(::|')// ? $1 : $default_package;
29 my $meta = Class::MOP::Class->initialize($package);
31 # Class::MOP::Package::has_package_symbol method *requires* a sigil
32 return unless length($sigil) and $meta->has_package_symbol("$sigil$name");
33 $meta->get_package_symbol("$sigil$name");
44 Shawn M Moore, C<< <sartak at gmail dot com> >>