in reply to Re^3: How to safely use $_ in a library function?
in thread How to safely use $_ in a library function?

Sounds good; but, if I add

Internals::SvREADONLY($_, 0);

to the code I gave above, immediately before the line $_ = 'fred';, I still get:

1:03 >perl 723_SoPW.pl literal1 Modification of a read-only value attempted at 723_SoPW.pl line 26. 1:03 >perl -v This is perl 5, version 18, subversion 1 (v5.18.1) built for MSWin32-x +86-multi-thread-64int ...

Also, where and how can I learn about a feature that is “intentionally-undocumented”? (This is a serious question!)

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^5: How to safely use $_ in a library function?
by hdb (Monsignor) on Sep 18, 2013 at 15:21 UTC

    It reminds me more and more of code like this:

    10: A=2 20: B=4 30: GOTO 200 40: PRINT C 50: END 200: C=A+B 210: GOTO 40
Re^5: How to safely use $_ in a library function?
by tobyink (Canon) on Sep 18, 2013 at 15:28 UTC

    Really? I get this...

    You can see what Internals functions you have like this:

    perl -E'say for sort keys %Internals::'

    Many of these built-in functions, including stuff in the Internals, utf8, re and UNIVERSAL packages amongst others, are defined in the file universal.c in the Perl source code. Search in the file for the string "xsub_details" and you will find a list. That's not a comprehensive list though; Internals::V and mro::get_linear_isa are certainly missing.

    use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

      Yes, Internals::SvREADONLY is there all right:

      1:35 >perl -E "say for sort keys %Internals::" SvREADONLY SvREFCNT V hv_clear_placeholders 1:35 >

      But it doesn’t work for me. A Windows issue, maybe?

      Thanks for the information on where to find the Internals package in the source code.

      Update: I tried the Internals module, but that doesn’t work (for me, on Windows) either:

      :-(

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        Does Const::Fast work for you?

        use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name