Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

My First Japh

by MF (Scribe)
on Sep 19, 2003 at 00:39 UTC ( [id://292546]=obfuscated: print w/replies, xml ) Need Help??

Hey there. It's my first Japh, be gentle. I've been programming Perl for a while now, but after a long break I decided to come back here to Perlmonks to attune myself to the finer points of the language. What better way to get started by hacking away at a Japh? Please comment on it, even if you think it isn't worth unraveling or think it's boring. Tested on two Unix boxes and an Activestate Windows box, it worked using strict.
#!/usr/bin/perl use strict; my $m=15;my %a;my $z="%x";$a{b}=qw(a);my @i=($m,$z);my @l; $l[0]="o r".' '."t "."n".' '."k l e".' '."m";@l= split(? ?,$l[0]); $a{z}="c";@i=reverse(@i);my $r = sprintf($i[0],$i[1]);$a{n}=qw(o); print "\U$r\E"."$l[1]$a{b}"; print"$l[$_]" for(3..4);print ", "."Jus"."$l[2]" ." "."\u$a{b}@l[3]@l[0]@l[2]h@l[6]@l[1] \u$a{z}$a{b}";for ($r=7;$r>4;$r--){print "@l[$r]";};print " \u@l[4]$a{n}$a{n}@l[4]";
Frank

Replies are listed 'Best First'.
Re: My First Japh
by davido (Cardinal) on Sep 19, 2003 at 06:11 UTC
    Fun twist... a Camel Kook huh? ;)

    I noticed one thing that perhaps you're doing intentionally to throw us off the trail, or perhaps it's just a mistake. If it's a mistake it could cause trouble in less trivial code, so I thought I'd mention it. It happens to be the only issue that prevents your program from running cleanly under use warnings;

    @l[5] isn't how you get at the 6th element of $l. What you really mean is $l[5]. Perl understood in this case, but if you turn on warnings (use warnings;) you get a bunch of warnings alerting you to the problem. Of course in a JAPH you might have done this to throw us off. But if it was unintentional, just take note that when talking about an entire array, you start with @, but when talking about one element, you start with $.

    That said, I also took a minute to sort it all out. What follows is a mildly de-obfuscated version with comments explaining what is going on. I went ahead and reduced the shell-game a little bit by boiling variable assignments down to their final values.

    use warnings; use strict 'refs'; my %a = ( b => 'a', z => 'c', n => 'o' ); my @l = qw/o r t n k l e m/; my $r = sprintf('%x', 15); # $r = 'f'. print "\U$r\E" . "$l[1]$a{'b'}"; # prints 'Fra' foreach $_ (3 .. 4) { print "$l[$_]"; # prints 'nk' } # prints ', Just Another Ca' print ', Jus' . "$l[2]" . ' ' . "\u$a{'b'}$l[3]$l[0]$l[2]h$l[6]$l[1] \u$a{'z'}$a{'b'}"; for ($r = 7; $r > 4; --$r) { print "$l[$r]"; # prints 'mel' } # prints 'Kook' print " \u$l[4]$a{'n'}$a{'n'}$l[4]";

    Or... expressed golf-style in fewer keystrokes...

    %a=(qw/b a z c n o/);@l=qw/o r t n k l e m/;$r=sprintf('%x',15); print"\U$r\E$l[1]$a{b}";print$l[$_]for 3..4;print ", Jus$l[2] \u$a{b}$l[3]$l[0]$l[2]h$l[6]$l[1] \u$a{z}$a{b}"; for($r=7;$r>4;--$r){print$l[$r]}print" \u$l[4]$a{n}$a{n}$l[4]"

    Of course the second version won't run under strictures, and it would spit out some warnings if use warnings was turned on, but this is golf. ;)

    Again, good job.

    Dave

    "If I had my life to do over again, I'd be a plumber." -- Albert Einstein

      Using @l[x] instead of $l[x] was indeed for obfuscation. I did it the correct way earlier in the code. I do admit to making the mistake unintentionally on occassion, and I think using this for extra obfuscation was wrong. Bad habits are easily grown :). Thanks for the compliment and dissection.
      Or... expressed golf-style in fewer keystrokes...

      Ooooh, ooooh, Golf! Can I play?

      %a=(qw/b a z c n o/);@l=qw/o r t n k l e m/;$r=sprintf('%x',15); print"\U$r\E$l[1]$a{b}",map{$l[$_]}3..4;$\=" \u$l[4]$a{n}$a{n}$l[4]"; print", Jus$l[2] \u$a{b}$l[3]$l[0]$l[2]h$l[6]$l[1] \u$a{z}$a{b}". join"",map{$l[8-$_]}1..3

      I'm sure someone can come along and trim off a few more strokes...


      $;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}} split//,".rekcah lreP rehtona tsuJ";$\=$ ;->();print$/

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: obfuscated [id://292546]
Approved by jonadab
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (2)
As of 2024-04-26 02:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found