Acme-Ook

 view release on metacpan or  search on metacpan

lib/Acme/Ook.pm  view on Meta::CPAN

    *{'O?'} = sub { @_ ? $Ook{$_[0]} : %Ook };
    *{'O!'} = sub { $Ook{$_[0]} = $_[1] };
}

sub optimise {
    # Coalesce sequences of increments or decrements
    my $prog = $_[1];
    # print "Before '$prog'\n";
    foreach my $thing ('$Ook', '$Ook[$Ook]') {
	foreach my $op ('+', '-') {
	    my $left = length "$thing$op$op;";
	    $prog =~ s{((?:\Q$thing$op$op\E;){2,})}
	      {"$thing$op=".(length ($1)/$left).';'}ges;
	}
    }
    # print "After '$prog'\n";
    return $prog;
}

sub _compile {
    shift;
    chomp $_[0];
    $_[0] =~ s/\s*(Ook(.)\s*Ook(.)\s*|(\#.*)|\S.*)/$;=$Ook{$2||@@}{$3||''};$;?$;:defined$4?"$4\n":die"OOK? $_[1]:$_[2] '$1'\n"/eg;
    return $_[0];
}

sub compile {
    my $self = shift;
    my $prog;
    $prog .= $self->_compile($$self, "(new)", 0) if defined $$self && length $$self;
    if (@_) {
	local *OOK;
	while (@_) {
	    my $code = shift;
	    if (ref $code eq 'IO::Handle') {
		while (<$code>) {
		    $prog .= $self->_compile($_, $code, $.);
		}
		close(OOK);
	    } else {



( run in 0.227 second using v1.01-cache-2.11-cpan-0d8aa00de5b )