Less a cool use for perl than a cool use for parrot, the following is a modification of the life game that comes with parrot. The interesting bit here is that it uses the new native call interface to connect to curses (without any modules, nor parrot itself actually knowing about curses) to do the drawing.

This is courtesy of Leon Brocard, Orange Parrot Hacker extraordinaire.

# # life.pasm # # Play conway's (no, not *him*. The other conway) game # of life # # Hacked by Leon Brocard <acme@astray.com> to use curses loadlib P1, "libcurses.so" dlfunc P0, P1, "initscr", "i" invoke dlfunc P0, P1, "curs_set", "ii" set I5, 0 invoke # First the generation count set I2, 5000 # Note the time time N5 # If true, we don't print set I12, 0 set S0, " " set S1, " " set S2, " " set S3, " " set S4, " ** " set S5, " * * " set S6, " * " set S7, " * * " set S8, " ****** " set S9, " " set S10, " " set S11, " " set S12, " " set S13, " " set S14, " " set S15, "" concat S15, S0 concat S15, S1 concat S15, S2 concat S15, S3 concat S15, S4 concat S15, S5 concat S15, S6 concat S15, S7 concat S15, S8 concat S15, S9 concat S15, S10 concat S15, S11 concat S15, S12 concat S15, S13 concat S15, S14 bsr dump set I0, 0 loop: ge I0, I2, getout inc I0 mod I31,I0,100 if I31, skip skip: bsr generate bsr dump branch loop getout: dlfunc P0, P1, "curs_set", "ii" set I5, 1 invoke dlfunc P0, P1, "endwin", "i" invoke end # S15 has the incoming string, S0 is scratch, S1 is scratch, S2 is scr +atch # # I0 is the length of the string # I1 is the current cell we're checking # I2 is the count for that cell # I3 is the offset to the neighbor generate: pushi length I0, S15 set S1, "" set I1, 0 genloop: set I2, 0 NW: set I3, -16 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", North inc I2 North: set I3, -15 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", NE inc I2 NE: set I3, -14 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", West inc I2 West: set I3, -1 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", East inc I2 East: set I3, 1 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", SW inc I2 SW: set I3, 14 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", South inc I2 South: set I3, 15 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", SE inc I2 SE: set I3, 16 add I3, I3, I0 add I3, I3, I1 mod I3, I3, I0 substr S0, S15, I3, 1 ne S0, "*", check inc I2 check: substr S0, S15, I1, 1 eq S0, "*", check_alive # If eq 3, put a star in else a space check_dead: eq I2, 3, star branch space check_alive: lt I2, 2, space gt I2, 3, space branch star space: concat S1, " " branch iter_done star: concat S1, "*" iter_done: inc I1 lt I1, I0, genloop done: set S15, S1 popi ret # S15 has the incoming string, S0 is scratch dump: saveall dlfunc P0, P1, "move", "iii" set I5, 0 set I6, 0 invoke restoreall if I12, dumpend save I0 save I1 saveall save I0 dlfunc P0, P1, "addstr", "it" set S5, "Generation: " invoke restore I0 dlfunc P0, P1, "addstr", "it" set S5, I0 invoke dlfunc P0, P1, "refresh", "i" invoke restoreall set I0, 0 set I1, 14 printloop: substr S0, S15, I0, 15 saveall dlfunc P0, P1, "addstr", "it" set S5, S0 invoke dlfunc P0, P1, "addstr", "it" set S5, "\n" invoke restoreall add I0, I0, 15 dec I1 ge I1, 0 printloop restore I1 restore I0 sleep 1 dumpend: ret

In reply to Conway's life, with parrot curses by Elian

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.