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

Well the question could be rephrased into

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

Threading?

> would be to preemptively copy substrings of the matched string into

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

The OP is accessing the same $1 4 times in a row.

Update

the code examples were updated in the parent post while I was replying.

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

Replies are listed 'Best First'.
Re^5: Why is "any" slow in this case?
by ikegami (Patriarch) on Jul 28, 2025 at 18:18 UTC

    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.

      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.