But then, the map gets an empty argument so the block would never be executed and the first print statement would do nothing. I changed the map block to {} and that broke the obfu. I couldn't see what was wrong.
After some time, I've realized that it's all just part of a long regexp. (I should have noticed that the readpipe statement doesn't print the error message it would normally print.) I located the end of the regexp.
But then I did another mistake. I thought that the long regexp could never match anything. It's so long that it would never accidentally match and it doesn't have an alteration (|) or a code block ((?{})) in it either, so I could just replace it with something simpler. I replaced it with 0 and the japh failed to work again. I tried some other replacements, like ?.^? so that it would still reset pos and have whatever effect together with the reset statement, and still it wouldn't work.
I overlooked the bracket in the beginning, and the worst thing is that I should have known better as Dietz fooled me with the exact same trick in YAJAPH.
From that point, it was straightforward to deobfuscate the japh.
I simplified the regexp to /[528]/. (This took quite some time, I had to look up every character in $CX to see if it's in the character set.) I saw that the pack statement unpacked the string by two characters each chunk (this wasn't trivial at first). So the chunks 65, 80 and 72 would be matched and chr produces APH from this.
Looking up $^T, I found that it was the time, so chr(length($^T)) must be a newline.
Finally, "\@l"|"\n" is "Jl of which you take
only the first character.