Execute CopyPasta Language: Difference between revisions

Content added Content deleted
(Added Perl example)
Line 723: Line 723:
usage: copypasta.nq [filename.cp]
usage: copypasta.nq [filename.cp]
</pre>
</pre>

=={{header|Perl}}==
<lang perl>use strict;
use warnings;
use Path::Tiny;

sub CopyPasta {
my($code) = @_;
my @code = split /\n/, $code =~ s/\s*\n+\s*/\n/gr;
return "Program never ends!" unless grep { $_ eq 'Pasta!' } @code;

my @cb;
my $PC = 0;
while (1) {
if ($code[$PC] eq 'Copy') { push @cb, $code[++$PC] }
elsif ($code[$PC] eq 'CopyFile') { $PC++; push @cb, join ' ', $code[$PC] eq 'TheF*ckingCode' ? @code : path($code[$PC])->slurp }
elsif ($code[$PC] eq 'Duplicate') { @cb = (@cb) x $code[++$PC] }
elsif ($code[$PC] eq 'Pasta!') { return @cb }
else { return "Does not compute: $code[$PC]" }
$PC++;
}
}

path('pasta.txt')->spew( "I'm the pasta.txt file.");

for my $prog (
"Copy \nRosetta Code\n\tDuplicate\n2\n\nPasta!\nLa Vista",
"CopyFile\npasta.txt\nDuplicate\n1\nPasta!",
"Copy\nInvalid\n Duplicate\n1\n\nGoto\n3\nPasta!",
"CopyFile\nTheF*ckingCode\nDuplicate\n2\nPasta!",
"Copy\nRosetta Code\nDuplicate\n2\n\nPasta"
) {
print $_ for CopyPasta($prog);
print '';
}

unlink 'pasta.txt';</lang>
{{out}}
<pre>Rosetta Code
Rosetta Code

I'm the pasta.txt file.

Does not compute: Goto

CopyFile TheF*ckingCode Duplicate 2 Pasta!
CopyFile TheF*ckingCode Duplicate 2 Pasta!

Program never ends!</pre>


=={{header|Perl 6}}==
=={{header|Perl 6}}==