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