keep $VERSION right in the repo
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / FindVariable.pm
CommitLineData
1716b200 1use strict;
2use warnings;
e93892cd 3package Devel::REPL::Plugin::FindVariable;
4
54beb05d 5our $VERSION = '1.003027';
6
6a5409bc 7use Devel::REPL::Plugin;
aa8b7647 8use namespace::autoclean;
e93892cd 9
10sub 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
351;
36
cfd1094b 37__END__
38
39=head1 NAME
40
41Devel::REPL::Plugin::FindVariable - Finds variables by name
42
30b459d4 43=head1 AUTHOR
44
45Shawn M Moore, C<< <sartak at gmail dot com> >>
46
cfd1094b 47=cut
48