# Store chars 'r','u','n' in an array
@lc=('r','u','n');

# Init array element seperator to ''
$"=q;;;

# getprotobyname(hmp) yields 20; multiply by 1.5 to get 30
# Store the number 30 in first 4 array elements
@c8=(getprotobyname(hmp)*1.5)x4;

# Join previous 4 elements together (to get '30303030') and
# store the length in $e
$e=length(join'',@c8);

# Add the ordinal values of p,e,r,l (112,101,114,108
# respectively) to get 435
$_ =ord(p)+ord(e)+ord(r)+ord(l);

# Split up 435 into a two-digit (43) and one-digit (5) number 
s s(..)(.)sss;

# 43 + 5 - 1 + 0*8 equals 47
$c8=$1+$2- 1+$**$e;

# Keep shuffling (r,u,n) until the order is (u,r,n)
# @lc now contains u,r,n
while (((ord($lc[$*]))<ord($lc[1]))||((ord($lc[1]))<ord($lc[2]))) {
    push(@lc,splice(@lc, rand @lc, 1));
}

# @c8 contains 30,30,30,30
# $c8[3] contains 30
# 105 = 105
# $= default value is 60, so ($=*2) = 120 and ($=/3) = 20 and 120+20=140
# $c8 contains 47
# 2**5+5*2+2**2 = 46
#
# crypt the character values of 30,30,30,30,30,105,140,47
# with a salt of chr(46)x2 to get: 'UbMFOOperLo'; then get
# lowercase using lc
$_=lc(crypt(pack('c8',@c8,$c8[3],105,$=*2+$=/3,$c8),chr(2**5+5*2+2**2)x2));

# Substitute to store perl in $_ and 'foo' in $1
s o.*(.\o\o)(.+)\oo$2oio;

# Ignore the fact that $_ = 'perl' and use $2 instead
# Store ' perl ' in the print field separator
# I collect PEZ dispensers.
($,,$foo)=(" $2 ",'PEZ');

# Store newline in the print record separator
$\="\n";

# substr gets the 'jo' out of the
# string "\$c8=join('/ /,('The','Perl','Journal'))"
# @lc contains 'u','r','n'
# $[ default value is 0 and $c8[0] = $c8[0+2] = $c8[0+3] = 30
# use some math to get the numbers 65 and 76, then use pack to
# convert them to chars A and L
# convert to lowercase and store in $o{lc(foo)}
# --> this lc is redundant, but that's ok
($o{lc($1)})=lc(
                substr("\$c8=join('/ /,('The','Perl','Journal'))",4,2).
                "@lc".
                pack(
                     'c2',
                     $c8[$[]*2 + $c8[$[+2]/6,                  ## 30*2 + 30/6 = 65
                     $c8[$[]*2 + $c8[$*+3]/3 + $c8[$[+2]/5)    ## 30*2 + 30/3 + 30/5 = 76
               );

# getprotobynumber(6) yields 'tcp';
$c8=getprotobynumber($c8[3]/10*2);

# manipulate 'tcp' to get 'the'
$c8=~s/(.)(.)(.)/$1 .'h'.chr(ord($3) -11)/e;

# Store the first (and only) value returned by keys in $_
$_ =(keys %o)[0];

# Print $c8 ('the') and $o{foo} ('journal') with a
# field separator of 'perl'
if (/(foo)/) {
    print $c8,$o{$1};
}
