#!/usr/bin/perl
use strict;
use warnings
; no warnings
'uninitialized'; use v5.10;
use Getopt::Long;
sub help {
<<__HELP__
Usage: $0 [options] [files]
Interprets dogless programs passed as command line arguments
, or from stdin
if no files are specified
.
Options:
-d --debug Enters debug mode, the source code is
printed
for each transformation
. -h --help This help text
-i --interval specifies a decimal interval in seconds to
__HELP__
}
#command line options
my ($help, $debug_mode, $interval);
my $any_command;
$any_command = qr/(?:<|>)(??{$any_command})|\$..|\\?.|$/s;
sub run_cmd {
my ($_, $pre, $post, $s) = @_;
my ($x, $y, $c);
if(($c) = /^<(.*)$/p) {
$pre =~ /\||$/p;
$pre = run_cmd($c, ${^PREMATCH}, ${^POSTMATCH}, ${^MATCH});
}
elsif (($c) = /^>(.*)$/p) {
$post =~ /\||$/p;
$post = run_cmd($c, ${^PREMATCH}, ${^POSTMATCH}, ${^MATCH});
}
elsif(($x, $y) = /^\$(.)(.)$/s) {
$_ = "$pre$s$post";
s/\Q$x\E/$y/;
}
elsif (/^"$/) {
$post =~ /^[^"]*("|$)/p;
}
elsif (/^\?$/) {
}
elsif (/^\^$/) {
}
elsif (/^~$/) {
return "$pre$s$post$pre$s~$post"; }
elsif (/^!$/) {
}
elsif (/^\|$/) {
}
elsif (($c) = /^\\?(.)$/sp){
}
else {
}
}
sub interpret {
my ($_) = @_;
while (/\|($any_command)/p) {
say if $debug_mode;
$_ = run_cmd($1, ${^PREMATCH}, ${^POSTMATCH}, '|');
}
}
GetOptions ("help|h" => \$help,
"debug|d" => \$debug_mode,
"interval|i=f" => \$interval,
) or die "Invalid options."; say help
() and exit if $help;}
IyEvdXNyL2Jpbi9wZXJsCnBhY2thZ2UgRG9nbGVzczsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOyBubyB3YXJuaW5ncyAndW5pbml0aWFsaXplZCc7CnVzZSB2NS4xMDsKdXNlIEdldG9wdDo6TG9uZzsKCnN1YiBoZWxwIHsKPDxfX0hFTFBfXwpVc2FnZTogJDAgW29wdGlvbnNdIFtmaWxlc10KCkludGVycHJldHMgZG9nbGVzcyBwcm9ncmFtcyBwYXNzZWQgYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgb3IgZnJvbSBzdGRpbiBpZiBubyBmaWxlcyBhcmUgc3BlY2lmaWVkLgoKT3B0aW9uczoKCiAgLWQgLS1kZWJ1ZyAgICAgICAgRW50ZXJzIGRlYnVnIG1vZGUsIHRoZSBzb3VyY2UgY29kZSBpcyAKICAgICAgICAgICAgICAgICAgICBwcmludGVkIGZvciBlYWNoIHRyYW5zZm9ybWF0aW9uLgogIC1oIC0taGVscCAgICAgICAgIFRoaXMgaGVscCB0ZXh0CgogIC1pIC0taW50ZXJ2YWwgICAgIHNwZWNpZmllcyBhIGRlY2ltYWwgaW50ZXJ2YWwgaW4gc2Vjb25kcyB0bwogICAgICAgICAgICAgICAgICAgIHdhaXQgYmV0d2VlbiBjb21tYW5kcwpfX0hFTFBfXwp9CgojY29tbWFuZCBsaW5lIG9wdGlvbnMKbXkgKCRoZWxwLCAkZGVidWdfbW9kZSwgJGludGVydmFsKTsKCm15ICRhbnlfY29tbWFuZDsKJGFueV9jb21tYW5kID0gcXIvKD86PHw+KSg/P3skYW55X2NvbW1hbmR9KXxcJC4ufFxcPy58JC9zOwoKc3ViIHJ1bl9jbWQgewogICAgbXkgKCRfLCAkcHJlLCAkcG9zdCwgJHMpID0gQF87CiAgICBteSAoJHgsICR5LCAkYyk7CiAgICBpZigoJGMpID0gL148KC4qKSQvcCkgewogICAgICAgICRwcmUgPX4gL1x8fCQvcDsKICAgICAgICAkcHJlID0gcnVuX2NtZCgkYywgJHteUFJFTUFUQ0h9LCAke15QT1NUTUFUQ0h9LCAke15NQVRDSH0pOwogICAgICAgIHJldHVybiAiJHByZSRzJHBvc3QiOwogICAgfQogICAgZWxzaWYgKCgkYykgPSAvXj4oLiopJC9wKSB7CiAgICAgICAgJHBvc3QgPX4gL1x8fCQvcDsKICAgICAgICAkcG9zdCA9IHJ1bl9jbWQoJGMsICR7XlBSRU1BVENIfSwgJHteUE9TVE1BVENIfSwgJHteTUFUQ0h9KTsKICAgICAgICByZXR1cm4gIiRwcmUkcyRwb3N0IjsKICAgIH0KICAgIGVsc2lmKCgkeCwgJHkpID0gL15cJCguKSguKSQvcykgewogICAgICAgICRfID0gIiRwcmUkcyRwb3N0IjsKICAgICAgICBzL1xRJHhcRS8keS87CiAgICAgICAgcmV0dXJuICRfOwogICAgfQogICAgZWxzaWYgKC9eIiQvKSB7CiAgICAgICAgJHBvc3QgPX4gL15bXiJdKigifCQpL3A7CiAgICAgICAgcmV0dXJuICIkcHJlJHMke15QT1NUTUFUQ0h9IjsKICAgIH0KICAgIGVsc2lmICgvXlw/JC8pIHsKICAgICAgICByZXR1cm4gcmV2ZXJzZSAiJHByZSRzJHBvc3QiOwogICAgfQogICAgZWxzaWYgKC9eXF4kLykgewogICAgICAgIHJldHVybiAiJHBvc3QkcyRwcmUiOwogICAgfQogICAgZWxzaWYgKC9efiQvKSB7CiAgICAgICAgcmV0dXJuICIkcHJlJHMkcG9zdCRwcmUkc34kcG9zdCI7CiAgICB9CiAgICBlbHNpZiAoL14hJC8pIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9CiAgICBlbHNpZiAoL15cfCQvKSB7CiAgICAgICAgcmV0dXJuICIkcHJlJHMkcG9zdCI7CiAgICB9CiAgICBlbHNpZiAoKCRjKSA9IC9eXFw/KC4pJC9zcCl7CiAgICAgICAgcmV0dXJuICIkcHJlJGMkcyRwb3N0IjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiAiJHByZSRwb3N0IjsKICAgIH0KfQoKc3ViIGludGVycHJldCB7CiAgICBteSAoJF8pID0gQF87CiAgICB3aGlsZSAoL1x8KCRhbnlfY29tbWFuZCkvcCkgewogICAgICAgIHNheSBpZiAkZGVidWdfbW9kZTsKICAgICAgICBzbGVlcCAkaW50ZXJ2YWwgaWYgZGVmaW5lZCAkaW50ZXJ2YWw7CiAgICAgICAgJF8gPSBydW5fY21kKCQxLCAke15QUkVNQVRDSH0sICR7XlBPU1RNQVRDSH0sICd8Jyk7CiAgICB9CiAgICByZXR1cm4gJF87Cn0KCgp1bmxlc3MgKGNhbGxlcikgewogICAgR2V0T3B0aW9ucyAoImhlbHB8aCIgPT4gXCRoZWxwLAogICAgICAgICAgICAgICAgImRlYnVnfGQiID0+IFwkZGVidWdfbW9kZSwKICAgICAgICAgICAgICAgICJpbnRlcnZhbHxpPWYiID0+IFwkaW50ZXJ2YWwsCiAgICAgICAgICAgICAgICkgb3IgZGllICJJbnZhbGlkIG9wdGlvbnMuIjsKICAgIHNheSBoZWxwKCkgYW5kIGV4aXQgaWYgJGhlbHA7CiAgICBwcmludCBpbnRlcnByZXQgKGpvaW4gJycsIDw+KTsKfQ==
YWJjZGVmfGdoaWprbHxtbiZxdW90O29wJnF1b3Q7fCZsdDskZ0EkbWUmZ3Q7fCZsdDska2wkZGwmZ3Q7fCZsdDskbkgkam8mZ3Q7fCZsdDskZXImZ3Q7fCZsdDskY2QkQVcmZ3Q7fCZsdDskaHgkZm8mZ3Q7fCRhISRpLCR4ICRiXD8=
abcdef|ghijkl|mn"op"|<$gA$me>|<$kl$dl>|<$nH$jo>|<$er>|<$cd$AW>|<$hx$fo>|$a!$i,$x $b\?