http://www.perlmonks.org?node_id=82872

```Different defaults it was, hard coded ran fine, but made the
dissection less obfu :-(

On my box \$| is the problem, \$| is 1, which flushes

print"\\$?:\$? \\$^F:\$^F \\$|:\$|\n";
\$?:0 \$^F:2 \$|:1

So this runs

\$_="011291020310415102805081036150812103801030115081";
s/(..)/\\x\$1/g;eval"\\$_=\"\$_\";";print,if(\$_=join'',map{
chr((vec(\$_,\$?,2*\$^F).vec(\$_,\$|,4))+96)}split//)=~s;~; ;g;

Disection follows (of the hard code) now that the use of:
\$?:0 \$^F:2 \$|:1 has been let out of the bag

tachyon

# this is what vec is
#
# another running dissection by tachyon
#
# code string
\$_="011291020310415102805081036150812103801030115081";

#  this line grabs pairs from \$_ and add hex escapes
s/(..)/\\x\$1/g;
# this gives:
# \$_='\x01\x12\x91\x02\x03\x10\x41\x51\x02\x80\x50\x81\x03\x61\x50\x81
+\x21\x03\x80\x10\x30\x11\x50\x81';

# the function of this line is to convert the hex
# escapes to their ascii representation due to the
# interpolation that occurs to \$_
eval"\\$_=\"\$_\";";

# the code below summarises these two steps
# but it is now more obvious what is going on
# uncomment it and this still runs so it must be right!
# \$_="011291020310415102805081036150812103801030115081";
# \$_ =~ s/(..)/chr hex \$1/eg;

# I will rearrange this to make it easier to understand
print, if(\$_=join'',map{chr((vec(\$_,0,4).vec(\$_,1,4))+96)}split//)=~s;
+~; ;g;

# first lets reset \$_ using my shortened code
\$_="011291020310415102805081036150812103801030115081";
\$_ =~ s/(..)/chr hex \$1/eg;

# split up our chars
@ascii = split//,\$_;

#now we replace the map with this boring loop
for (@ascii) {
push @decode, chr((vec(\$_,0,4).vec(\$_,1,4))+96);
}

# join the decoded chars
\$_ = join'', @decode;

# sub out the ~ chars  s/~/ /g  tr/~/ /
s;~; ;g;

#print it
print "\n\$_";

# so now all we need to understand is what vec does:
#
# vec EXPR, OFFSET, BITS
#
# The vec function provides a compact storage of lists of
# unsigned integers. These integers are packed as tightly as
# possible within an ordinary perl string. EXPR is treated as a
# bit string. OFFSET specifies the index of the particular
# element. BITS specifies how wide each element is in bits.
#
# So what happens is that for each eight bits we grab two
# nybbles (4 bits) giving us 0-15 decimal after 'vec'ing.
# we concat these together, run that through chr and