#!/usr/bin/perl -w
use strict;
use warnings;
use JavaScript;
use PIL2JS::JSPM;
use UNIVERSAL::require;
my $rt = JavaScript::Runtime->new;
my $ct = $rt->create_context;
=head1 NAME
jsperl - a wrapped javascript interpreter that supports Perl5
=head1 SYNOPSIS
$ jsperl
Perl5.perl_use("IO::File");
f = Perl5.perl_eval("IO::File->new('>file.txt')");
perl_call_method(f, "print", "fnord\\n")
=head1 DESCRIPTION
This is a wrapper around JavaScript.pm, which exports a Perl5 class
that has three methods: C<perl_eval>, C<perl_use>, C<perl_can>.
The embeded JavaScript engine is capable for round-tripping perl5
closures, and exports three functions: C<perl_apply>,
C<perl_get_method>, C<perl_call_method>
You need a modified version of L<JavaScript> perl module,
L<http://home.clkao.org/~clkao/jspm>.
=cut
PIL2JS::JSPM::init_js_for_perl5($ct);
our $MAGIC_NOLF = "#PIL2JS // IGNORE NEXT LINEFEED#";
$ct->bind_function(
name => 'print',
func => sub { my $line = shift;
$line =~ s/$MAGIC_NOLF//;
print $line;
});
local $/;
my $foo = <>;
$ct->eval($foo);
END {
$ct->destroy;
}
=head1 AUTHORS
Chia-liang Kao E<lt>clkao@clkao.orgE<gt>
=head1 COPYRIGHT
Copyright 2005 by Chia-liang Kao E<lt>clkao@clkao.orgE<gt>.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
See L<http://www.perl.com/perl/misc/Artistic.html>
=cut