So, I was just poking around with the Perl interpreter , manually satisfying my curiosity about how Perl handles the DATA and END filehandles and their respective (Markers? Constants?) if called from the shell.
I noticed that, __DATA__ is interesting, because it's handled line by line, as you type. So, by combining that with some stupidly insecure and terrible eval magic, I now present the simplest, stupidest REPL ever made by mortal hands.
First, type "perl <enter>" into the shell.
while (<DATA>){ if ($_ eq "!\n"){ eval $string;$string = '';print "\n";} else { $string .= $_; } } __DATA__ #REPL behavior starts here!
I don't imagine this has any use other than exhibiting my madness to the world, but I found it an interesting misuse of the language.
This particular code maintains local variables through code chunks, but not across differing evals; my original code went statement by statement. I can't figure out how to golf this down while maintaining the ability to handle code blocks that go across multiple lines, nor have I thus far figured out how to maintain local variables across the evals.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Simple REPL madness.
by CountZero (Bishop) on Dec 22, 2008 at 07:12 UTC | |
by tilly (Archbishop) on Dec 22, 2008 at 08:48 UTC | |
by pobocks (Chaplain) on Dec 22, 2008 at 09:34 UTC | |
by pobocks (Chaplain) on Dec 22, 2008 at 08:52 UTC | |
by belg4mit (Prior) on Dec 23, 2008 at 18:35 UTC | |
by pobocks (Chaplain) on Jan 03, 2009 at 06:47 UTC |