There is also something to be said about nudging developer on the "right" way to do stuff.
Perl is not only hard to read because there are many shortcuts that might look like line noise for the inexperienced (hell, Rust have a bunch of those too), it's because there is a bunch of the ways to do anything.
Like take humble array
Perl> @a
$VAR1 = 1;
$VAR2 = 2;
$VAR3 = 3;
$VAR4 = 4;
$VAR5 = 5;
Perl> @a + 2
$VAR1 = 7;
Why adding a number to array results in number ? Because array in scalar context returns its length. It leads to some very compact code
if (@a > 3) {print "big array"}
but, uh, what you do if you want to see length of string ? well length($string).
Will that also work for arrays ? Nope, if you want to force scalar context you're supposed to do scalar(@array). So how to add 2 arrays ?
@c = (@a, @b) #
obviously. But wait, what we really typed after variable expansion is ((1,2),(2,3)) and in other languages
irb(main):001:0> a = [1,2]
=> [1, 2]
irb(main):002:0> b=[2,3]
=> [2, 3]
irb(main):003:0> c = [a,b]
=> [[1, 2], [2, 3]]
>>> a = [1,2]
>>> b = [2,3]
>>> c = [a,b]
>>> c
[[1, 2], [2, 3]]
that's exactly what we get. Confusing ? Sure. But it saves few characters!