http://qs321.pair.com?node_id=11120376


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

Perl is not JS. Does JS even have references as first-class values like Perl does?

I just tested it and was surprised that overwriting a reference to a literal number or string through $_ in map raises an error, even if multiple layers of references are involved, but overwriting a reference (even through metareferences) to an array is fine.

Devel::Peek reveals that the READONLY flag is apparently copied by the \ operator. If you start with a literal value, such as 1 or "abc" (which has the READONLY flag) the references are similarly seen to be read-only values, but if you start with an anonymous aggregate, which is mutable, the references are mutable. I would argue that, if there is a bug here, it is that references to constants, which should themselves (the references) be mutable, are incorrectly marked read-only.

Replies are listed 'Best First'.
Re^6: Shouldn't references be readonly?
by LanX (Saint) on Aug 05, 2020 at 22:21 UTC
    > Perl is not JS. Does JS even have references as first-class values like Perl does?

    All objects are references in JS and implicitly dereferenced. Passing an object means passing the reference.

    I doubt that JS has a way to reveal the counter printed like in Perl, so the use of references is transparently hidden.

    But the semantics are the same, and IIRC does ECMA explicitly name the concept of "reference".

    And yes, JS has no reference constructor like \ but you can compare objects for identity with ===

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