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