in reply to Re^4: Why is "any" slow in this case?
in thread Why is "any" slow in this case?

Why do we need $1 to be magic, when it's read-only?

We don't need it to be. As I mentioned, the alternative would be to make make a copy of the matched text on match. The down side is that this would happen even if $1 isn't used. Same goes for all the other vars I mentioned.

if this is about avoiding overhead for optional variables, retrieving it just once on demand would be sufficient.

That's not how magic works. Get magic changes a variable from something that stores a value, to a function that produces the value on demand. You can either store the value in the var, or generate it each time the var is accessed.

Replies are listed 'Best First'.
Re^6: Why is "any" slow in this case?
by LanX (Saint) on Jul 28, 2025 at 20:33 UTC
    OK I always took the word "magic" as term for various "implementation quirks" in Perl and not as a well defined mechanism.

    Variable::Magic suggests otherwise ...

    ... learning every day something new. :)

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

      Correct, I'm referring to the magic added by sv_magic.

      $ perl -MDevel::Peek -e'Dump( $1 )' SV = PVMG(0x561e81adde40) at 0x561e81af86f0 REFCNT = 1 FLAGS = (GMG,SMG) # Has get magic, has set magic IV = 0 NV = 0 PV = 0 MAGIC = 0x561e81b067d0 # Magic's data, incl callbacks MG_VIRTUAL = &PL_vtbl_sv MG_TYPE = PERL_MAGIC_sv(\0) MG_OBJ = 0x561e81af86d8 MG_LEN = 1

      Magic is used by most punctuation vars (e.g. $!, $$, %ENV, %SIG), tie, lvalue operators (specifically substr, vec, pos and $#a), f( $h{ x } ) (to prevent autovivification) and more.