Just another Perl hacker

This is an old revision of this page, as edited by 84.172.83.91 (talk) at 16:53, 30 May 2006 (added a Bourne shell-based pseudo-JAPH). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Just another Perl hacker, or JAPH, typically refers to a Perl program which prints "Just another Perl hacker," (the comma is canonical but is occasionally omitted). Short JAPH programs are often used as signatures in online forums. The phrase or acronym is also occasionally used (without code) for a signature.

JAPH programs are classically done using extremely obfuscated methods, in the spirit of the Obfuscated C Contest. More recently, as the phenomenon has become so well known, the phrase is sometimes used in ordinary examples (without obfuscation).

The idea of using tiny Perl programs which print a signature as a signature was originated by Randal L. Schwartz, in his postings to the newsgroup comp.lang.perl. [1]

Examples

JAPH program without obfuscation:

print "Just another Perl hacker,\n";

Embedding JAPH in opaque code:

$_='987;s/^(d+)/$1-1/e;$1?eval:print"Just another Perl hacker,"';eval;

Decoding JAPH from an encrypted string literal:

$_="krJhruaesrltre c a cnP,ohet";$_.=$1,print$2while s/(..)(.)//;

Appearing as if it does something completely unrelated to printing JAPH:

$_ = "wftedskaebjgdpjgidbsmnjgc";
tr/a-z/oh, turtleneck Phrase Jar!/; print;

Using only Perl keywords (no literals or punctuation):

 not exp log srand xor s qq qx xor
 s x x length uc ord and print chr
 ord for qw q join use sub tied qx
 xor eval xor print qq q q xor int
 eval lc q m cos and print chr ord
 for qw y abs ne open tied hex exp
 ref y m xor scalar srand print qq
 q q xor int eval lc qq y sqrt cos
 and print chr ord for qw x printf
 each return local x y or print qq
 s s and eval q s undef or oct xor
 time xor ref print chr int ord lc
 foreach qw y hex alarm chdir kill
 exec return y s gt sin sort split

Using only punctuation (no alphanumeric characters):

`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++
;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=` 

Imitations

A variant of this, practiced by programmers working on the Parrot project, involves Parrot assembly programs printing the phrase "Just another Parrot hacker":

# OO obfuscated
   bounds 1
   trace 0
   newclass P0, "Just another Parrot Hacker\n"
   shift S0, P5
   does I0, P0, S0
   add I0, 4
   bsr I0
   pack S0, 381, I0, I0
   invoke
   ret

Often Parrot JAPHs are only lightly obfuscated; they're usually intended to demonstrate or test a feature in a non-trivial use.

A different form of imitation would be to solve the exercise in a system outside of Perl. This example is supposed to be run in a Bourne shell and will create a file named "Just another Perl Hacker" (on a file system that supports it) in the current working directory. The string to print will be determined by the "basename" command.

  a="Just another Perl Hacker"
  [ -f"$a" ]||
     echo "perl -e\"print '\$(basename \"\$0\")'\"">./"$a"
  ./"$a"

i.e. while it is true that (as demanded by the exercise text) "Perl prints \"Just another Perl Hacker\"", the code requires other software to function, here specifically Bourne shell and "basename".

Additional information

See also

References

This article is based on material taken from the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.

  1. ^ Randal L. Schwartz in usenet message M1HFPVH2JQ.FSF@HALFDOME.HOLDIT.COM explaining the origine of JAPH. Available through google: http://groups.google.com/group/comp.lang.perl.misc/msg/ecc405feeefc120c