Interesting use of ARRAY(0x...) reference value in scalar context to provide a series of offsets. Also liked the (split//,$}) to assign to @_ although just(split//,[]) would have made me think really hard for a while (how do you split an anon array ref??) so might have been a bit more obfu.
Here is the decode
tachyon
$_="415250511528293422193223122519645759676174";
# $_{$_}++; # no effect
# $}=[]; # $} has scalar val ARRAY(0x..)
# (split//,$}); # assign @_ = qw(A R R A Y ( ...)
# @}=map$_,@_; # @}=@_;
# {@_=map @}->[$_],(0..5);}# @_ = first 6 elements @_
# net effect of all of the above commented out code
@_=qw/A R R A Y (/;
# push@a,$&while s;..;;;
push @a, $1 while /(..)/g; # load @a with 41,52....
#$j=join'',map (chr((ord$_[0])+$_),(@a[0..3]));
#$a=join'',map(chr((ord$_[1])+$_),(@a[4..10]));
#$p=join'',map(chr((ord$_[4])+$_),(@a[11..14]));
#$h=join'',map(chr((ord$_[5])+$_),(@a[15..20]));
#
#print join' ',$j,$a,$p,$h,"\n";
# this is the same as the above code
print chr(65+$_) for @a[0..3];
print $"; # prints a space by default
print chr(82+$_) for @a[4..10];
print $";
print chr(89+$_) for @a[11..14];
print $";
print chr(40+$_) for @a[15..20];
print $";
# this is almost the same, but no spaces :-(
@offset = ((65)x4,(82)x7,(89)x4,(40)x6);
map{print chr($a[$_]+$offset[$_])}0..20;
|