All pastes #792590 Raw Edit

ul.pl

public text v1 · immutable
·published 2007-11-21 15:25 UTC
rendered paste body
#!/bin/perl -w

#Underload interpreter in Perl. By ais523

use strict;

my $prog="";

my @stack=();

while($prog||(defined($_=<>)&&($prog.=$_)))
{
    my $f=substr $prog,0,1;
    $prog=substr $prog,1;
    $f eq 'S' and print shift @stack;
    $f eq 'a' and $stack[0]='('.$stack[0].')';
    $f eq '^' and $prog=$prog.shift @stack;
    $f eq ':' and unshift @stack, $stack[0];
    $f eq '*' and do{$stack[1].=$stack[0]; shift @stack;};
    $f eq '!' and shift @stack;
    $f eq '~' and do{my $t=$stack[0]; $stack[0]=$stack[1]; $stack[1]=$t};
    $f eq '(' and do{
	my $t='';
	my $n=1;
	while($n)
	{
	    $f=substr $prog,0,1;
	    $prog=substr $prog,1;
	    $f eq '(' and $n++;
	    $f eq ')' and $n--;
	    $n and $t.=$f;
	}
	unshift @stack, $t;
    };
}