WebPerl

Logo

Run Perl in the browser with WebPerl!

View the Project on GitHub haukex/webperl

[ Using - Building - 🦋 - Notes - Legal - Wiki ]

Misc. Notes on WebPerl

Other places I’ve written about WebPerl:

I also gave a lightning talk at YAPC::EU 2018 in Glasgow: Video Link

DOI 10.5281/zenodo.1400490

In the Press

TODOs

  1. Testing

    • Continue work on WebPerl.t
      • More tests for Unicode support (Perl/JS interface, Perl.eval(), plus Emscripten’s virtual FS)
    • Focus on getting the tests running in the browser instead of node.js
    • How to best package tests?
      • If possible, a separate bundle, so that it can be loaded optionally and we don’t need to rebuild
      • How does make test find and handle all the various modules’ ts?
    • How to best disable individual tests that we know won’t work? (qx etc.)
    • How to handle the many tests that call an external Perl?
      • patching t/test.pl’s runperl() seems easiest at the moment, and we can use the iframe method from the IDE
  2. Misc

    • Write up a full RPC example
    • Investigate Emscripten’s main loop concept for handling nonblocking sockets?
    • Turn some patches from emperl5 into patches for P5P
    • Submit some patches to Emscripten
    • Add Perl.Util functions for making file uploads and downloads easier
      • Plus an example showing how to use it to run a “legacy” Perl script with inputs and output
    • Perhaps create a CPAN Bundle:: module or similar for build.pl deps?
    • There is some potential for restructuring:
      • Perl.glue() and Perl.dispatch() could go into WebPerl.xs (?)
      • Parts of webperl.js could go into common_preamble.js or WebPerl.xs, so that emperl.js is runnable on its own in a Web Worker (?) (see notes in perlrunner.html / e12f1aa25a000)
      • nodeperl_dev_prerun.js could probably be merged into that as well
    • Regarding the funky syntax highlighting on GitHub: https://github.com/atom/language-html/issues/88#issuecomment-431361414
  3. See Also

SSL

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned.key -out selfsigned.crt
...
Common Name (e.g. server FQDN or YOUR name) []: localhost
...
$ plackup --enable-ssl --ssl-key-file=selfsigned.key --ssl-cert-file=selfsigned.crt web/webperl.psgi
# then go to https://localhost:5000 and accept the certificate warning

Possible Improvements

Limitations

Release Checklist

Prior Art

Several people have built microperl with Emscripten:


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/notes.md