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

t/1.t  view on Meta::CPAN

	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.675 second using v1.01-cache-2.11-cpan-de7293f3b23 )