Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re: can someone explain Devel::REPL::Plugin::LexEnv?

by Corion (Pope)
on Jul 11, 2012 at 12:05 UTC ( #981093=note: print w/replies, xml ) Need Help??

in reply to can someone explain Devel::REPL::Plugin::LexEnv?

When implemented naively, a REPL has no lexical environment, or rather, all lexical variables declared for one iteration of REP are lost when the next Loop starts. A naive REPL would look like this:

#!perl -w use strict; while (1) { print ">"; my $statement = <>; # Read print "---\n"; my @res= eval $statement; # Eval if( $@ ) { print "ERROR: $@\n"; } else { print Dumper \@res; # Print print "\n"; }; };

The usage could be as follows:

>my $name='World'; "Hello $name" --- $VAR1 = [ 'Hello World' ]; >

If you try to be a good citizen and create a lexical variable in one statement:

> my $name = 'World'; --- $VAR1 = [ 'World' ];

... and then try to print the value of $name in the next statement:

> "Hello $name"; --- ERROR: Global symbol "$name" requires explicit package name at (eval 4 +) line 1, <> line 4.

you will find that Perl complains about $name not being declared. This happens because everything you create lexically is thrown away after the eval part of the REPL has finished. The technical term is "the scope of the eval statement has been left". If you want to learn more about scope, see Coping With Scoping

The mentioned plugin seems to provide one lexical scope across multiple iterations of the loop.

Replies are listed 'Best First'.
Re^2: can someone explain Devel::REPL::Plugin::LexEnv?
by tospo (Hermit) on Jul 11, 2012 at 12:19 UTC
    OK, thanks, then I guess this plugin is loaded by default because when I start the Devel::REPL shell, I do get a lexical environment already. Thanks for the clarification!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://981093]
[ambrus]: YourMother: my brother told me their cat wants to climb into the dishwasher if they leave the door open. Not when the dishwasher is started, but after it's done washing, because it's still warm and cats like warm.
[Your Mother]: Sure, sure. I had a cat as a kid who always slept on top of the fridge because of the heat dissipation up the back.

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (14)
As of 2017-12-18 15:32 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (492 votes). Check out past polls.