http://www.perlmonks.org?node_id=946514


in reply to ref to read-only alias ... why?

The condition in which "\" copies a scalar is: SvPADTMP(sv) && !IS_PADGV(sv). Not sure that that means. The condition is still there in the latest codebase.

It turns out that whether you get a read-only error or not depends on whether you are using a threaded Perl or not.

Using the lastest codebase:

$ git clean -dfx \ && ./Configure -des -Dusedevel -Dcc='ccache cc' \ && make miniperl ... $ ./miniperl -le'for (1) { my $r = \$_; $$r++; print; print $$r; }' Modification of a read-only value attempted at -e line 1. $ git clean -dfx \ && ./Configure -des -Dusedevel -Dcc='ccache cc' -Dusethreads \ && make miniperl ... $ ./miniperl -le'for (1) { my $r = \$_; $$r++; print; print $$r; }' 1 2