OK, so here's the deal:

If you haven't figured it out already, this is accomplished through the program reading
its own source code.  That much is accomplished through the:

@ARGV=$0;

and subsequently the <> operator.

The process is then basically to determine each character's position in the file,
and determine if it is 3 times a prime number.  (e.g., 2*3=6, 3*3=9, etc.)

This is accomplished with:

setting $/ equal to the letter position (in this case $%) divided by 3

$/=$%/3;

for($l=2;$l<=sqrt($/);$l++){((!($/%$l)))&&($-=1);}

which sets $- to 1 if $/ has any factors less than or equal to its square root but
greater than 1 (i.e. it is a composite number)

much later, the case of 1 is removed with ($/>1)

ensuring that it is a multiple of 3 is confirmed with !($%%3)

So that's that for that process.  The next trick is to get the right character to 
print.  To do this, we take each of the characters referred to above, and rot48 it.

$_=chr((ord)+48))

then we print the character right at the end.

The rest of the code is nonsense, included to confuse, space the code out, and get
the right characters in the right positions.

For example...

Character 6 in the code is a '$'.  
ord '$' = 36
36 + 48 = 84
chr(84) = T

Thus the printing of the T in "The Perl Journal"

Oh yeah...and I add a newline at the end with (++$%>159)&&(exit(print $e));
you'll notice $e is set when I chop the lines I read in....