Acme-Perl-VM
view release on metacpan or search on metacpan
lib/Acme/Perl/VM.pm view on Meta::CPAN
if($gimme == G_SCALAR){
return $retval[-1];
}
elsif($gimme == G_ARRAY){
return @retval;
}
return;
}
package
Acme::Perl::VM::OP_CallSV;
use Mouse;
has cv => (
is => 'ro',
isa => 'B::CV',
required => 1,
);
has next => (
is => 'ro',
isa => 'B::OBJECT',
required => 1,
);
has flags => (
is => 'ro',
isa => 'Int',
required => 1,
);
use constant {
class => 'OP',
type => B::opnumber('entersub'),
name => 'entersub',
desc => 'subroutine entry',
file => __FILE__,
line => 0,
};
sub isa{
shift;
return B::COP->isa(@_);
}
no Mouse;
__PACKAGE__->meta->make_immutable();
package
Acme::Perl::VM::Alias;
sub TIESCALAR{
my($class, $scalar_ref) = @_;
return bless [$scalar_ref], $class;
}
sub FETCH{
return ${ $_[0]->[0] }
}
sub STORE{
${ $_[0]->[0] } = $_[1];
return;
}
1;
__END__
=head1 NAME
Acme::Perl::VM - A Perl5 Virtual Machine in Pure Perl (APVM)
=head1 VERSION
This document describes Acme::Perl::VM version 0.006.
=head1 SYNOPSIS
use Acme::Perl::VM;
run_block{
print "Hello, APVM world!\n",
};
=head1 DESCRIPTION
C<Acme::Perl::VM> is an implementation of Perl5 virtual machine in pure Perl.
Perl provides a feature to access compiled syntax trees (B<opcodes>) by
C<B> module. C<B::*> modules walk into opcodes and do various things;
C<B::Deparse> retrieves Perl source code from subroutine references,
C<B::Concise> reports formatted syntax trees, and so on.
This module also walks into the opcodes, and executes them with its
own B<ppcodes>.
You can run any Perl code:
use Acme::Perl::VM;
run_block {
print "Hello, APVM world!\n";
};
This code says B<Hello, APVM world> to C<stdout> as you expect.
Here is a more interesting example:
BEGIN{ $ENV{APVM} = 'trace' }
use Acme::Perl::VM;
run_block {
print "Hello, APVM world!\n";
};
( run in 0.596 second using v1.01-cache-2.11-cpan-5a3173703d6 )