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