For example?
Here's a fun exercise, write a dictionary of arrays. Now write a dictionary of 2d arrays.
In any other language, that's hardly a challenge to both read and write such a structure. Not so with perl.
Umm … ok:
my %dict = ( foo => [ 1, 2, 3 ], bar => [ 4, 5, 6 ], );
> Now write a dictionary of 2d arrays.
my %dict2d = ( foo => [ [1, 2, 3], [4, 5, 6] ], bar => [], );
It’s pretty much identical to JS. Not sure how that’s supposed to exemplify how hard it is to write Perl.
To be clear, even a nested hash is all well as long as the depth and the keys are literals (as in your example). It is when keys are dynamic that things get unruly. And god forbid if the _depth_ of nesting is dynamic. All of these are trivial to implement in Python, Ruby, JS, PHP, ...
Used as a sigil, $ always tags a scalar, a single value.
$foo = 3;
A reference to something else is a single value. $bar = [qw/ apple orange banana /];
The special variable $$ is the pid of the current process, borrowed from the shell. Special variables with punctuation names have length at most one. The leading $ is the scalar sigil, and the latter is its name.Dereferencing a reference to scalar is rarely used and looks like either
$$baz = $quux;
or ${$baz} = $quux;
In a regex, $ broadly means end of line, but the exact meaning is context sensitive: possibly end of buffer, just before a newline at the end of a buffer, or end of logical line within a buffer. Where it matters, the anchors \z and \Z have less flexible meanings.Of those, the kinda fuzzy one is $ inside a regex. The rest follow consistent, simple rules. I’m not sure what you mean by different operations on $. Am I skipping a difficult case you have in mind?
I kind of felt lost first getting started with Scala where I felt like there was symbol overload.
print "[", +( join '', map { "-> $_" } @$_ ), "]" for @{$ref}Because computers are so slow, memory is so limited and disk space is so expensive the programmer absolutely had to write it in a single line in the most convoluted way possible? Yeah, that's definitely a language fault.
And this is a quick sample, there is much, much hairier stuff to be found in real code. "Knowing the language well" is seen as a virtue for many.