Acme-Brainfuck
view release on metacpan or search on metacpan
examples/countdown.pl view on Meta::CPAN
#!/usr/bin/env perl
use Acme::Brainfuck qw/verbose/;
print "Countdown commencing...\n";
++++++++++[>+>+<<-]
>>+++++++++++++++++++++++++++++++++++++++++++++++<<
++++++++++[>>.-<.<-]
print "We have liftoff!\n";
examples/helloworld.pl view on Meta::CPAN
#!/usr/bin/env perl
use Acme::Brainfuck;
print "Hello world!", chr ++++++++++ ;
examples/jabh.pl view on Meta::CPAN
#!/usr/bin/env perl
use Acme::Brainfuck;
print "Just another ";
++++++[>++++++++++++++++<-]>
++.--
>+++[<++++++>-]<.>[-]+++[<------>-]<
+.-
+++++++++.---------
++++++++++++++.--------------
++++++.------
>+++[<+++++++>-]<.>[-]+++[<------->-]<
+++.---
+++++++++++.-----------
print " hacker.\n";
examples/math.pl view on Meta::CPAN
#!/usr/bin/env perl
use Acme::Brainfuck;
use strict;
use warnings;
my $answer = +++[>++++++<-]> ;
print "3 * 6 = $answer \n";
examples/reverse.pl view on Meta::CPAN
#!/usr/bin/env perl
use Acme::Brainfuck qw/verbose/;
while(1)
{
print "Say something to Backwards Man and then press enter: ";
+[->,----------]<
print 'Backwards Man says, "';
[+++++++++++.<]<
print "\" to you too.\n";
~
}
lib/Acme/Brainfuck.pm view on Meta::CPAN
# The memory pointer and memory cells of our Turing machine.
our $p = 0;
our @m = ();
# The basic Brainfuck instructions. Extras will be added in import().
our $ops = '+-<>,.[]';
# Whether or not we accept extra instructions.
our $verbose = 0;
# print out filtered text?
our $debug = 0;
sub import()
{
shift;
foreach (@_)
{
if (/^verbose$/)
{
$ops .= '~#';
lib/Acme/Brainfuck.pm view on Meta::CPAN
my $code = $1;
my $len = length($1);
my $at = pos($ret) - ($len + 1);
$code =~ s/^/do { /g;
$code =~ s/$/P; }; /g;
$code =~ s/(\++)/"P += ".length($1).";" /eg;
$code =~ s/(\-+)/"P -= ".length($1).";" /eg;
$code =~ s/(<+)/"\$Acme::Brainfuck::p -= ".length($1).";" /eg;
$code =~ s/(>+)/"\$Acme::Brainfuck::p += ".length($1).";" /eg;
$code =~ s/\./print chr P; /g;
$code =~ s/,/P = ord getc;/g;
$code =~ s/\[/while(P){/g;
$code =~ s/\]/}; /g;
if ($verbose)
{
$code =~
s/~/\$Acme::Brainfuck::p = 0;\@Acme::Brainfuck::m = (); /g;
$code =~
s/\#/print STDERR sprintf\('\$p = %d \$m[\$p]= %d', \$Acme::Brainfuck::p, P\), "\\n"; /g;
}
$code =~ s/P/\$Acme::Brainfuck::m\[\$Acme::Brainfuck::p\]/g;
substr($ret, $at, $len, $code);
}
$_ = $ret;
print $_ if $debug;
};
1;
__END__
=pod
=head1 NAME
Acme::Brainfuck - Embed Brainfuck in your perl code
=head1 SYNOPSIS
#!/usr/bin/env perl
use Acme::Brainfuck;
print 'Hello world!', chr ++++++++++. ;
=head1 DESCRIPTION
Brainfuck is about the tiniest Turing-complete programming language you
can get. A language is Turing-complete if it can model the operations of
a Turing machine--an abstract model of a computer defined by the British
mathematician Alan Turing in 1936. A Turing machine consists only of an
endless sequence of memory cells and a pointer to one particular memory
cell. Yet it is theoretically capable of performing any computation. With
this module, you can embed Brainfuck instructions delimited by whitespace
lib/Acme/Brainfuck.pm view on Meta::CPAN
Each sequence of Brainfuck instructions becomes a Perl block and returns the
value of the current memory cell.
=head1 EXAMPLES
=head2 JABH
#!/usr/bin/env perl
use Acme::Brainfuck;
print "Just another ";
++++++[>++++++++++++++++<-]>
++.--
>+++[<++++++>-]<.>[-]+++[<------>-]<
+.-
+++++++++.---------
++++++++++++++.--------------
++++++.------
>+++[<+++++++>-]<.>[-]+++[<------->-]<
+++.---
+++++++++++.-----------
print " hacker.\n";
=head2 Countdown
#!/usr/bin/env perl
use strict;
use Acme::Brainfuck qw/verbose/;
print "Countdown commencing...\n";
++++++++++[>+>+<<-]
>>+++++++++++++++++++++++++++++++++++++++++++++++<<
++++++++++[>>.-<.<-]
print "We have liftoff!\n";
=head2 Reverse
#!/usr/bin/env perl
use Acme::Brainfuck qw/verbose/;
while(1)
{
print "Say something to Backwards Man and then press enter: ";
+[->,----------]<
print 'Backwards Man says, "';
[+++++++++++.<]<
print "\" to you too.\n";
~
}
=head2 Math
#!/usr/bin/env perl
use Acme::Brainfuck;
use strict;
use warnings;
my $answer = +++[>++++++<-]> ;
print "3 * 6 = $answer \n";
=head1 VERSION
1.1.1 Apr 06, 2004
=head1 AUTHOR
Jaldhar H. Vyas E<lt>jaldhar@braincells.comE<gt>
=head1 THANKS
my $class = shift;
return $class->{FILENO};
}
sub WRITE {
my $class = shift;
my($buf,$len,$offset) = @_;
$offset = 0 if (! defined $offset);
my $data = substr($buf, $offset, $len);
my $n = length($data);
$class->print($data);
return $n;
}
sub PRINT {
my $class = shift;
${$class->{data}} .= join('', @_);
$class->{position} = length(${$class->{data}});
1;
}
sub PRINTF {
my $class = shift;
my $fmt = shift;
$class->PRINT(sprintf $fmt, @_);
}
sub READ {
my $class = shift;
my ($buf,$len,$offset) = @_;
$offset = 0 if (! defined $offset);
my $data = ${ $class->{data} };
( run in 0.755 second using v1.01-cache-2.11-cpan-de7293f3b23 )