Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Are beheaded strings known to be slow?

by ikegami (Patriarch)
on Oct 09, 2025 at 18:16 UTC ( [id://11166453]=note: print w/replies, xml ) Need Help??


in reply to Are beheaded strings known to be slow?

Weird.

There shouldn't be any performance penalty to reading an OOK ("beheaded") scalar. Rather than adding an offset each time the string it accessed, the pointer to the string is changed to point beyond the "head" when the string is "beheaded".

use Devel::Peek qw( Dump ); my $s = "abcdef"; $s .= "g"; # Trigger COW Dump( $s ); substr( $s, 0, 1, "" ); Dump( $s );
SV = PV(0x59d752a54ee0) at 0x59d752a830d0 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x59d752a6b2e0 "abcdefg"\0 CUR = 7 LEN = 16 SV = PV(0x59d752a54ee0) at 0x59d752a830d0 REFCNT = 1 FLAGS = (POK,OOK,pPOK) OFFSET = 1 PV = 0x59d752a6b2e1 ( "\x01" . ) "bcdefg"\0 CUR = 6 LEN = 15

Before the beheading, the string started at 0x59d752a6b2e0 and used 7 bytes of 16.

After the beheading, the string started at 0x59d752a6b2e1 and used 6 bytes of 15.

In both cases, the same memory block starting at 0x59d752a6b2e0 is used. But because the PV, CUR and LEN fields were adjusted, reading from the scalar is identical whether it's an OOK ("beheaded") scalar or not.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (2)
As of 2025-11-14 02:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What's your view on AI coding assistants?





    Results (70 votes). Check out past polls.

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.