Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^11: ref to read-only alias ... why? (notabug)

by ikegami (Pope)
on Jan 06, 2012 at 22:01 UTC ( #946672=note: print w/ replies, xml ) Need Help??


in reply to Re^10: ref to read-only alias ... why? (notabug)
in thread ref to read-only alias ... why?

Expected result:

Expected Current for (1..2) { for (1) { my $r = \$_; ++$$r; say $$r; 2 2 2 2 (threaded) } [die] (non-threaded) } for (1..2) { for (1) { ++$_; say; 2 2 [die] } } for (1..2) { for (1..3) { ++$_; say; 234 234 234 345 } }


Comment on Re^11: ref to read-only alias ... why? (notabug)
Download Code
Re^12: ref to read-only alias ... why? (notabug)
by dk (Chaplain) on Jan 06, 2012 at 22:10 UTC
    If I'm not mistaken, I believe that there's another issue you're trying to pull it here, namely difference between for(1) and for(1..3). They _do_ behave weirdly, I totally agree. But I believe that's a totally separate issue, probably related to parser even, because this code:

    my $a = 2; $_++ for 1..$a; print "$a\n"; # 2

    shows that $a is not aliased. Therefore I don't see how the original problem that needs a scalar be both aliased and read-only, is relevant here.

      You seem to be operating from the point of view that "It's self-evident that literals should create non-modifiable values." Yet that's currently not the case in 50% of the examples I posted.

      «1» in «for (1)» could return a non-modifiable value, but it intentionally returns a modifiable value (in a sense) some of the times.

      «1..3» in «for (1..3)» could return non-modifiable values, but it returns modifiable values, and it's intentionally not getting changed because people want literals to return modifiable values.

      It's not self-evident that literals should create non-modifiable values.

        Sorry, I didn't make myself clear. I do see that these values are modifiable. But my objection is that for(1..3) construct doesn't do aliasing, which is 50% of the original bug. If my example above did print 3 instead of 2, then yes, I'd accept that as a proof.

        Same thing on $_++ for 1 - it dies, because of aliasing comes into play. And I neither get what does "intentionally returns a modifiable value (in a sense) some of the times" mean. For what I see, it just doesn't return a modifiable value, at all.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (16)
As of 2015-07-07 13:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (88 votes), past polls