I worked for many years with PHP and learned to live and succeed with its sometimes very "organic" structure and behaviour.
Its philosophy on work with Strings and Arrays is:
"We will copy safely everything, except in very special cases and only momentanely."
- So that a Reference on a String becomes a String again if you dont watch after it.
That results in that in Big abstracted Data Structures the Data gets copied again and once again.
Which creates Big Server Load for large texts.
Also assigning parts of Associative Array Trees would Copy the subbranch of the Tree.
Which in Big Structures would result again in heavy in-memory copying.
I found in Perl a Reference is always a Reference untill you dereference it.
Some find the Syntax weird but I think when you get it right it does exactly what you expect it to do.
It does not under the hood some hidden stuff which is not what you intended to happen!!
my $sstr = "my string";
my $rsstr = \$sstr;
print "org str '$sstr'; addr: '" . \$sstr . "'\n";
$sstr .= " + my string add";
print "rs 1 str '$sstr'; addr: '" . \$sstr . "'\n";
$$rsstr .= " + add to ref";
print "rs 2 str '$sstr'; ref: '" . $rsstr . "'; addr: '" . \$sstr . "'
org str 'my string'; addr: 'SCALAR(0x22e8af8)'
rs 1 str 'my string + my string add'; addr: 'SCALAR(0x22e8af8)'
rs 2 str 'my string + my string add + add to ref'; ref: 'SCALAR(0x22e8
+af8)'; addr: 'SCALAR(0x22e8af8)'
When I assign a text to another text I still keep the same Address Space
And the text is not copied in-memory somewhere else, or destroyed and recreated! ... Hello Python!!
At first I felt quite bewildered by the Function Parameter Handling ...
but when you really get to dominate it it unleashes the Power of Real Polymorphism
wantarray() is another powerful tool for Polymorphism.
It gives you the right thing at the right time.
So its a really Powerful Tool to build beautiful stuff in the hands of a skilful programmer!!
So I feel also as finally being understood and given a Home.