changelog
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / FindVariable.pm
CommitLineData
e93892cd 1package Devel::REPL::Plugin::FindVariable;
2
6a5409bc 3use Devel::REPL::Plugin;
e93892cd 4use namespace::clean -except => [ 'meta' ];
5
6sub find_variable {
7 my ($self, $name) = @_;
8
06df0767 9 return \$self if $name eq '$_REPL';
10
6d22063d 11 # XXX: this code needs to live in LexEnv
12 if ($self->can('lexical_environment')) {
13 return \( $self->lexical_environment->get_context('_')->{$name} )
14 if exists $self->lexical_environment->get_context('_')->{$name};
15 }
16
e93892cd 17 my $sigil = $name =~ s/^([\$\@\%\&\*])// ? $1 : '';
18
19 my $default_package = $self->can('current_package')
20 ? $self->current_package
21 : 'main';
22 my $package = $name =~ s/^(.*)(::|')// ? $1 : $default_package;
23
24 my $meta = Class::MOP::Class->initialize($package);
25
86f22c23 26 # Class::MOP::Package::has_package_symbol method *requires* a sigil
27 return unless length($sigil) and $meta->has_package_symbol("$sigil$name");
e93892cd 28 $meta->get_package_symbol("$sigil$name");
29}
30
311;
32
cfd1094b 33__END__
34
35=head1 NAME
36
37Devel::REPL::Plugin::FindVariable - Finds variables by name
38
30b459d4 39=head1 AUTHOR
40
41Shawn M Moore, C<< <sartak at gmail dot com> >>
42
cfd1094b 43=cut
44