Commit | Line | Data |
e93892cd |
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 | |
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 | |
28 | 1; |
29 | |
cfd1094b |
30 | __END__ |
31 | |
32 | =head1 NAME |
33 | |
34 | Devel::REPL::Plugin::FindVariable - Finds variables by name |
35 | |
36 | =cut |
37 | |