increment $VERSION after 1.003029 release
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / FindVariable.pm
1 use strict;
2 use warnings;
3 package Devel::REPL::Plugin::FindVariable;
4 # ABSTRACT: Finds variables by name
5
6 our $VERSION = '1.003030';
7
8 use Devel::REPL::Plugin;
9 use namespace::autoclean;
10
11 sub find_variable {
12     my ($self, $name) = @_;
13
14     return \$self if $name eq '$_REPL';
15
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};
20     }
21
22     my $sigil = $name =~ s/^([\$\@\%\&\*])// ? $1 : '';
23
24     my $default_package = $self->can('current_package')
25                         ? $self->current_package
26                         : 'main';
27     my $package = $name =~ s/^(.*)(::|')// ? $1 : $default_package;
28
29     my $meta = Class::MOP::Class->initialize($package);
30
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");
34 }
35
36 1;
37
38 __END__
39
40 =pod
41
42 =head1 AUTHOR
43
44 Shawn M Moore, C<< <sartak at gmail dot com> >>
45
46 =cut