Run Perl in the browser with WebPerl!
[ Using - Building - 🦋 - Notes - Legal - Wiki ]
Thanks to Paweł Murias and his
amazing work on Rakudo.js
and
6Pad, I’ve been able to patch
support for Perl 6 into WebPerl!
Currently requires Google Chrome (due to BigInt support), see the Quick Start below on how to get this up and running on your local machine!
<script src="webperl.js"></script>
<script type="text/perl6">
say "Hello, Perl 6 World!"; # goes to JavaScript console by default
my $document = EVAL(:lang<JavaScript>, 'return document');
my $window = EVAL(:lang<JavaScript>, 'return window');
$document.getElementById('my_button')
.addEventListener("click", -> $event {
$window.alert("You clicked the button!");
} );
</script>
Prerequisites: perl
(a recent version is recommended, e.g. v5.26 and up),
and cpanm
to easily install
dependencies (otherwise, see the files cpanfile
for the dependencies and
use the module installer of your choce).
In a shell (the following assumes Linux):
$ git clone https://github.com/haukex/webperl.git
$ cd webperl
$ wget https://github.com/haukex/webperl/releases/download/v0.09-beta/webperl_prebuilt_v0.09-beta.zip
$ unzip -j webperl_prebuilt_v0.09-beta.zip '*/emperl.*' -d web
$ cpanm --installdeps .
$ cd experiments ; cpanm --installdeps . ; cd ..
$ experiments/p6/6init.pl # this patches Perl 6 support in
$ plackup web/webperl.psgi
Then point your Chrome browser at http://localhost:5000/6demo.html, and have a look at its source.
Have fun!
Rakudo.js
Large download (10MB compressed, 74MB uncompressed) - can we repackage it to make it smaller, or is there a good way to distribute this?
My code steal^H^H^H^H^Hborrows the prepackaged Rakudo.js
build from
6Pad and caches it locally. The script
experiments/p6/6init.pl
also patches the experimental P6 support into
webperl.js
(see the Quick Start above).
Note that both Perl 5 and Perl 6 are only loaded on demand by
webperl.js
, so if you only use one or the other, you won’t have the
overhead of loading both.
For now, I’ve basically just patched Rakudo.js
’s evalP6()
into
Raku.eval()
, and NQP_STDOUT
into Raku.output
, to make things more
like the Perl 5 WebPerl, and provided some of the same API for Perl 6
as I provide for Perl 5.
The JS API provided by WebPerl for Perl 6 currently closely mirrors
the Perl 5 API: There is a JS object Raku
which provides the following functions / properties that do mostly the
same as for Perl 5:
Raku.addStateChangeListener( function (from,to) {} )
Raku.state
Raku.output = function (str,chan) {}
Raku.makeOutputTextarea()
Raku.init( function () {} )
Raku.eval( code )
You can add Perl 6 code to your HTML pages with <script>
tags
with type="text/perl6"
or type="text/raku"
.
For everything else, I defer to Rakudo.js
for now! I will update this
documentation as things evolve.
Additional notes on WebPerl’s experimental Perl 6 support may be found in the GitHub Wiki.
Copyright (c) 2018 Hauke Daempfling (haukex@zero-g.net) at the Leibniz Institute of Freshwater Ecology and Inland Fisheries (IGB), Berlin, Germany, http://www.igb-berlin.de
Please see the “Legal” page for details.
You can find the source for this page at https://github.com/haukex/webperl/blob/gh-pages/perl6.md