Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^3: Shouldn't references be readonly?

by jcb (Parson)
on Aug 05, 2020 at 21:48 UTC ( [id://11120369]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Shouldn't references be readonly?
in thread Shouldn't LITERAL references be readonly? (updated)

That seems to be because a reference to a literal actually constructs a new scalar; note that the examples you gave where an error was thrown at an attempt to modify a read-only value did not involve references, but only aliases to literal values. I suspect that the anonymous scalar you get when you say \1 is probably modifiable. There is no such thing as a literal aggregate in Perl — the {} and [] operators are defined as constructors instead.

Replies are listed 'Best First'.
Re^4: Shouldn't references be readonly?
by LanX (Saint) on Aug 05, 2020 at 21:56 UTC
    > That seems to be because a reference to a literal actually constructs a new scalar;

    again more theories ...

    see how the ref to a real constant like a stays stable in Re^8: Shouldn't references be readonly? (updated) and please explain the difference to your allegedly constant 1 .

    > There is no such thing as a literal aggregate in Perl — the {} and [] operators are defined as constructors instead.

    Defined? ... Source?

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

      please explain the difference to your allegedly constant 1 .

      Simple. Your constant a has a label. The label means that it uses a specific location to store the (constant) value. All refs to the label resolve to the location of the value and hence stringify to the same address.

      By contrast 1 has no label. It is an actual literal. This does not require one specific location to store it and therefore refs to it will refer to different locations.


      🦛

      Source?

      Source is perlref: (I misremembered slightly)

      Anonymous hash and array composers like these can be intermixed freely to produce as complicated a structure as you want. The multidimensional syntax described below works for these too. The values above are literals, but variables and expressions would work just as well, because assignment operators in Perl (even within local() or my()) are executable statements, not compile-time declarations.
        you are aware that "constructor" isn't even mentioned in your definition? ;)

        calling [$a] a "literal constructor" is not far fetched.

        a non literal construction is in contrast to do { @a=($a); \@a } because it involves a variable.

        This it meets the definitions in perlglossary ("no variable") and is also mirrored in JS terminology which has 100% the same semantic.

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

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2024-03-29 07:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found