Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
    The big dilemma with Perl5 was that it kept full backwards compatibility with Perl4.

    The big dilemma with Perl6 was that it kept no backwards compatibility with Perl5.

... sigh ...

The ultimate reason for that sigil table for P5 is context propagation

Take §{EXPR} = EXPR2 with § as first sigil

  • a $ will evaluate EXPR2 in scalar context
  • a @ or % will evaluate EXPR2 in list context
I'm always confused how Perl6 is handling that, and I can't remember it long after looking it up.

BUT this is one of the biggest obstacle for backwards compatibility.

The table is also "cheating" in the scalar column, because %$ and @$ denotes de-referencing .

Which is indeed a PITA in Perl5 and IMHO one of the top problems for beginners.

E.g. in order to pass an array to a sub we have to reference

func(\@arr);

but inside the sub we need to start fiddling with array-refs and a new syntax with plenty of arrows

sub func { my $arr =shift; print "First: $arr->[0]"; print "Nested List @{$arr->[0]}"; }

I would rather have preferred a new lexical pragma in Perl5 to automatically alias "$ref-form" with "@list-form of a variable.

I.e. the declaration my @arr automatically implies $arr =\@arr and (somehow) vice versa.

Like this $arr[0] and $arr->[0] would lead to the same result and many arrows could be saved.

This would come with the cost of fusing the namespace for scalars and arrays, but

  1. using the same symbol arr for different vars is considered bad style anyway
  2. it'll stay fully compatible to old code, by simply avoiding the pragma

Perl inherited this dilemma from Perl4 where the list form of @arr was very convenient, but most other dynamic languages I know operate with the ref form (without sigil) by default.

arr=[] is a ref/obj in JS, Python and Ruby

If these languages need the flattened list form of arr they apply a method or a postfix syntax. You could say everything is a scalar there.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery


In reply to Re^3: Hash Curious (context/dereferencing/backwards compatible) by LanX
in thread Hash Curious by cadphile

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (2)
As of 2024-04-16 21:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found