r61086@onn: sartak | 2008-05-26 21:31:16 -0400
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / FindVariable.pm
CommitLineData
e93892cd 1package Devel::REPL::Plugin::FindVariable;
2
3use Moose::Role;
4use namespace::clean -except => [ 'meta' ];
5
6sub find_variable {
7 my ($self, $name) = @_;
8
6d22063d 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
e93892cd 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
281;
29