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