Skip to content

Latest commit

History

History
139 lines (99 loc) 路 4.42 KB

perl6.md

File metadata and controls

139 lines (99 loc) 路 4.42 KB

[ Using - Building - 馃 - Notes - Legal - Wiki ]

WebPerl Experimental Perl 6 Support 馃

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>

Quick Start

  • 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!

Experimental Status and Notes

Documentation

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