zeroperl is an experimental build of Perl5 in a sandboxed, self-contained WebAssembly module.
Read the full blog here
Requires Docker or Apple Container (macOS).
Docker:
docker build -t zeroperl .
mkdir -p output
docker run --rm -v $(pwd)/output:/output zeroperl cp -r /artifacts/. /output/Apple Container (macOS):
container build -t zeroperl .
mkdir -p output
container run --rm -v $(pwd)/output:/output zeroperl cp -r /artifacts/. /output/Output in ./output/:
zeroperl.wasm— reactor with asyncifyzeroperl_reactor.wasm— reactor without asyncifyperl-wasi-prefix/— Perl library prefixexiftool.min.pl— minified ExifTool (if enabled)
Docker:
docker build --build-arg PERL_VERSION=5.42.0 --build-arg BUILD_EXIFTOOL=false -t zeroperl .Apple Container:
container build --build-arg PERL_VERSION=5.42.0 --build-arg BUILD_EXIFTOOL=false -t zeroperl .Available build arguments
| Arg | Default | |
|---|---|---|
PERL_VERSION |
5.42.0 |
Perl source version |
EXIFTOOL_VERSION |
13.42 |
ExifTool version |
BUILD_EXIFTOOL |
true |
Include ExifTool |
STACK_SIZE |
8388608 |
WASM stack (bytes) |
INITIAL_MEMORY |
33554432 |
WASM initial memory (bytes) |
ASYNCIFY |
true |
Enable asyncify |
TRIM |
true |
Strip unused modules |
Build from final stage to reuse cached wasi-perl:
Docker:
docker build --target final -t zeroperl .Apple Container:
container build --target final -t zeroperl .The easiest way to test a new build of zeroperl.wasm is to clone the TypeScript wrapper and run its test suite:
git clone https://github.com/6over3/zeroperl-tsSee the zeroperl-ts README for details.
Note: The first argument passed to Perl must be
zeroperl. Depending on your runtime, you may need to map/dev/nullas a preopen.