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