<?xml version="1.0" encoding="windows-1252"?>
<node id="237465" title="Black Perl updated for Perl 5" created="2003-02-21 10:54:32" updated="2005-08-15 16:38:26">
<type id="1584">
poem</type>
<author id="230012">
jonadab</author>
<data>
<field name="doctext">
&lt;p&gt;I suppose someone has probably already done this, but
   my attempt to find it in SuperSearch failed, so here
   goes.  I have adapted Black Perl so that it compiles
   in Perl 5.  It astonished me how few changes were
   necessary, and how little they disrupted the mood.
&lt;/p&gt;
&lt;p&gt;I didn't do this because I like Black Perl (the first
   time I read it, I thought, "how perverse"), but more
   because, having read that it would not compile in
   Perl 5, I felt...  challenged.  Though in retrospect,
   it wasn't much of a challenge.  Still, here it is...
&lt;/p&gt;
&lt;code&gt;
# Black Perl, adapted for Perl 5 by Jonadab.
# Adapted from Black Perl, as seen in the Camel,
# 2nd ed., p 553

BEFOREHAND: close door, each window &amp; exit;  wait until time;
    open spell book; study; read (spell, $scan, select); tell us;
write it, print the hex while each watches,
    reverse length, write again;
           kill spiders, pop them, chop, split, kill them.
              unlink arms, shift, wait and listen (listening, wait).
sort the flock (then, warn "the goats", kill "the sheep");
    kill them, dump qualms, shift moralities,
           values aside, each one;
               die sheep; die (to, reverse the =&gt; system
                      you accept (reject, respect));
next step,
    kill next sacrifice, each sacrifice,
           wait, redo ritual until "all the spirits are pleased";
    do it ("as they say").
do it(*everyone***must***participate***in***forbidden**s*e*x*).
return last victim; package body;
    exit crypt (time, times &amp; "half a time") &amp; close it.
           select (quickly) and warn next victim;
AFTERWARDS: tell nobody.
    wait, wait until time;
           wait until next year, next decade;
               sleep, sleep, die yourself,
                      die @last
&lt;/code&gt;
&lt;p&gt;So now it compiles in Perl 5 (tested with 5.6.1), but
   it still doesn't do anything useful.  (I think I'm
   glad.)     I suppose, having taken this step, it is
   inevitable that someone will also port it to Perl 6,
   in time.  As an interesting side note, if you change
   &lt;code&gt;$scan&lt;/code&gt; back to &lt;code&gt;scan&lt;/code&gt;
   (as in the original) it compiles but dumps core.
   Maybe I should have left it that way.
&lt;/p&gt;
&lt;hr&gt;&lt;/hr&gt;
&lt;code&gt;
sub H{$_=shift;while($_){$c=0;while(s/^2//){$c++;}s/^4//;$
v.=(' ','|','_',"\n",'\\','/')[$c]}$v}sub A{$_=shift;while
($_){$d=hex chop;for(1..4){$pl.=($d%2)?4:2;$d&gt;&gt;=1}}$pl}$H=
"16f6da116f6db14b4b0906c4f324";print H(A($H)) # -- jonadab
&lt;/code&gt;</field>
</data>
</node>
