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 )