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 |