Acme::Brainfuck

Acme::Brainfuck(3pm)   User Contributed Perl Documentation  Acme::Brainfuck(3pm)



NAME
       Acme::Brainfuck - Embed Brainfuck in your perl code

SYNOPSIS
        #!/usr/bin/env perl
        use Acme::Brainfuck;

        print 'Hello world!', chr ++++++++++. ;

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 into your perl code.  It will be translated into Perl as
       parsed.  Brainfuck has just just 8 instructions (well more in this
       implementation, see "Extensions to ANSI Brainfuck" below.) which are as
       follows

   Instructions
       + Increment
           Increase the value of the current memory cell by one.

       - Decrement
           Decrease the value of the current memory cell by one.

       > Forward
           Move the pointer to the next memory cell.

       < Back
           Move the pointer to the previous memory cell.

       , Input
           Read a byte from Standard Input and store it in the current memory
           cell.

       . Output
           Write the value of the current memory cell to standard output.

       [ Loop
           If the value of the current memory cell is 0, continue to the cell
           after the next ']'.

       ] Next
           Go back to the last previous '['.

   Extensions to ANSI Brainfuck
       This implementation has extra instructions available.  In order to avoid
       such terrible bloat, they are only available if you use the verbose
       pragma like so:

       use Acme::Brainfuck qw/verbose/;

       The extra instructions are:

       ~ Reset
           Resets the pointer to the first memory cell and clear all memory
           cells.

       # Peek
           Prints the values of the memory pointer and the current memory cell
           to STDERR.  See also "Debugging" below.

   Debugging
       By using the debug pragma like this:

       use Acme::Brainfuck qw/debug/;

       you can dump out the generated perl code.  (Caution: it is not pretty.)
       The key to understanding it is that the memory pointer is represented by
       $p, and the memory array by @m  Therefore the  value of the current
       memory cell is $m[$p].

RETURN VALUE
       Each sequence of Brainfuck instructions becomes a Perl block and returns
       the value of the current memory cell.

EXAMPLES
   JABH
        #!/usr/bin/env perl
        use Acme::Brainfuck;
        print "Just another ";
        ++++++[>++++++++++++++++<-]>
        ++.--
        >+++[<++++++>-]<.>[-]+++[<------>-]<
        +.-
        +++++++++.---------
        ++++++++++++++.--------------
        ++++++.------
        >+++[<+++++++>-]<.>[-]+++[<------->-]<
        +++.---
        +++++++++++.-----------
        print " hacker.\n";

   Countdown
        #!/usr/bin/env perl
        use strict;
        use Acme::Brainfuck qw/verbose/;

        print "Countdown commencing...\n";
        ++++++++++[>+>+<<-]
        >>+++++++++++++++++++++++++++++++++++++++++++++++<<
        ++++++++++[>>.-<.<-]
        print "We have liftoff!\n";

   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";
          ~
        }

   Math
        #!/usr/bin/env perl
        use Acme::Brainfuck;
        use strict;
        use warnings;

        my $answer = +++[>++++++<-]> ;

        print "3 * 6 = $answer \n";

VERSION
        1.1.1 Apr 06, 2004

AUTHOR
        Jaldhar H. Vyas E<lt>jaldhar@braincells.comE<gt>

THANKS
       Urban Mueller - The inventor of Brainfuck.

       Damian Conway - For twisting perl to hitherto unimaginable heights of
       weirdness.

       Marco Nippula <http://www.hut.fi/~mnippula/> - Some code in this module
       comes from his brainfuck.pl

       Mr. Rock - Who has a nice Brainfuck tutorial at
       <http://www.cydathria.com/bf/>.  Some of the example code comes from
       there.

COPYRIGHT AND LICENSE
        Copyright (c) 2004, Consolidated Braincells Inc.
        Licensed with no warranties under the Crowley Public License:

        "Do what thou wilt shall be the whole of the license."



perl v5.20.2                       2015-09-28               Acme::Brainfuck(3pm)