Since I think that live coding gives more flexibility and visual feedback than conventional REPL, here is approach to simple Perl live coding environment using Emacs, AnyEvent, PadWalker, Package::Stash and eval.
Live coding basically consists in performing evaluation of code when it comes from the text editor to a running script, but I also wanted persistent lexicals between
eval's. One of ways is to predefine lexicals (or make simple context hash) and/or use
$'somevar syntax to create/modify
main package vars and/or define global lexicals with
use vars qw($one @two %three). Live environment should have asynchronous capability, and AnyEvent was the first option that came to my mind.
Hence, I created perl script which represents running interpreter with optional (but default) PadWalker/Package::Stash processing in order to move
my's declarations to global context. And some elisp stuff to communicate with running interpreter from emacs.
That's it - load
perl-live.el in emacs, create scratch cperl-mode buffer, start interpreter (
C-c C-l), open "*perl live*" buffer in other window to check output and have fun - evaluate line/region (
C-c C-c) or something between braces (
*perl live* buffer behaves like REPL (in comint-mode)
Here is short screencast (frame dropped) of a live session with random stuff featuring PDL::Graphics::Simple, OpenGL w/ shaders, sub-processes, live http server modification (AnyEvent::HTTPD, Twiggy), interconnection with SuperCollider via OSC protocol using Net::LibLO and running Gtk2 / Prima / Tk / Wx / SDL - all at the same time, just to test whether it was possible )
p.s. i hope someone will implement similar front-end in other perl-friendly text editors in order to spread perl live coding