Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Perl, I'm coming home...

by HugoNo1 (Novice)
on Sep 21, 2018 at 13:12 UTC ( #1222799=note: print w/replies, xml ) Need Help??


in reply to Perl, I'm coming home...

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 . "' +\n";
results in:
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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1222799]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2020-12-03 11:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How often do you use taint mode?





    Results (55 votes). Check out past polls.

    Notices?