The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    Perlito5 - a Perl5 compiler

SYNOPSIS
        use Perlito5::Compiler;
        use Perlito5::JavaScript2::Emitter;
        use Perlito5::JavaScript2::Runtime;
        use Data::Dumper;

        my $perl5_source = ' print "hello, World!\n" ';
        $Perlito5::PKG_NAME = 'main';
        $Perlito5::PROTO    = {};
        my $ast = Perlito5::Grammar::exp_stmts($perl5_source, 0);
        print "Syntax Tree:\n";
        print Dumper Perlito5::Match::flat($ast);
        my $js_source = Perlito5::AST::CompUnit::emit_javascript2_program([
            Perlito5::AST::CompUnit->new( name => 'main', body => Perlito5::Match::flat($ast) )
        ]);
        print "JavaScript source code:\n";
        print $js_source;


        # in the command line:

        perlito5 --help

        perlito5 -Cjs program.pl

        perlito5 -Cjava program.pl

DESCRIPTION
    This program reads Perl5 source code and generates native code.

    The compiler options are available with the command:

        perlito5 -h

COOKBOOK
  Obtaining a "perlito5.js" script that executes in the "node.js" JavaScript compiler
        # Step 1: use perlito5 to compile perlito5 to JavaScript.
        perlito5 --bootstrapping -Cjs `which perlito5` > perlito5.js

        # Step 2: ensure that PERL5LIB points to the directory where Perlito5.pm is installed.
        echo $PERL5LIB

        # Step 3: set PERL5LIB if needed.
        perldoc -l Perlito5
           # /usr/local/lib/perl5/site_perl/5.20.1/Perlito5.pm
        export PERL5LIB=/usr/local/lib/perl5/site_perl/5.20.1

        # Step 4: install nodejs if needed.

        # Step 5: this should work now:
        nodejs perlito5.js -e ' print "hello, World!\n" '
            # hello, World!

  Obtaining a Perl compiler script that runs in the browser
        # Step 1: create a Perl script that loads the compiler and evaluates a string.
        #         Save this to "perlito5-browser.pl":

        use Perlito5::Compiler;
        use Perlito5::JavaScript2::Emitter;
        use Perlito5::JavaScript2::Runtime;
        sub eval_perl5 {
            eval "$_[0]; 1"
            or warn "Perl error: $@";
        }

        # Step 2: use perlito5 to compile your "perlito5-browser.pl" script to JavaScript.

        perlito5 --bootstrapping -Cjs perlito5-browser.pl > perlito5-browser.js

        # Step 3: load the compiler in the browser;
        #         compile perl5 to javascript;
        #         eval() the javascript code.
        # Note: the default implementation for "print" will invoke console.log();
        #       you can override this by redefining p5pkg['Perlito5::IO'].print()

        <html>
          <head>
            <script type="text/javascript" src="perlito5-browser.js"></script>
            <script type="text/javascript">
                function hello() {
                    return p5pkg.main.eval_perl5([
                        ' print "hello, World!\n" '
                    ]);
                }
            </script>
          </head>
          <body>
            <input type="button" value="Execute" onclick="hello()"/>
          </body>
        </html>

AUTHORS
    Flavio Soibelmann Glock <fglock@gmail.com>.

SEE ALSO
    <http://fglock.github.io/Perlito>

COPYRIGHT
    Copyright 2011-2017 by Flavio Soibelmann Glock and others.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

    See <http://dev.perl.org/licenses/artistic.html>