Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Fast Way to Split String in to Chunk of Equal Length

by ikegami (Patriarch)
on Nov 25, 2011 at 17:09 UTC ( [id://940107]=note: print w/replies, xml ) Need Help??


in reply to Re: Fast Way to Split String in to Chunk of Equal Length
in thread Fast Way to Split String in to Chunk of Equal Length

unpack is the way to go, but one tip is that unpack 'a3' x $n, $str runs a few percent quicker than unpack '(a3)*', $str if you know in advance how many fields there are.

How can you not know in advance how many fields there are (int(length($seq)/3))?

avoiding the allocation, creation and destruction of 10 million concurrent small arrays -- even if you have ample memory for them -- can save a significant amounts of time

Any implementation in mind? Something like the following?

while ($seq =~ /(.{3})/sg) { # Substring in $1 ... }

Replies are listed 'Best First'.
Re^3: Fast Way to Split String in to Chunk of Equal Length
by BrowserUk (Patriarch) on Nov 25, 2011 at 17:20 UTC

    Assuming your question is in regard to:

    Also, if your problem allows you to unpack the strings just in time at the point where you need them, rather than en masse, avoiding the allocation, creation and destruction of 10 million concurrent small arrays -- even if you have ample memory for them -- can save a significant amounts of time.

    I meant -- unpack the strings just in time at the point where you need them -- something like:

    for my $seq ( @seqs ) { my @bits = unpack 'a3a3a3', $seq; ## $bits[ ... ]; }

    rather than -- en masse --:

    @seqs = map[ unpack '(a3)*', $_ ], @seqs; for my $ref ( @seqs ) { ## $ref->[ ... ] }

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
Re^3: Fast Way to Split String in to Chunk of Equal Length
by BrowserUk (Patriarch) on Nov 25, 2011 at 20:23 UTC

    At it again. Unannounced updates. The above post originally consisted entirely of just:

    Any implementation in mind? Something like the following?
    while ($seq =~ /(.{3})/sg) { # Substring in $1 ... }

    To answer the dumb question that wasn't there originally,

    How can you not know in advance how many fields there are (int(length($seq)/3))?

    If you have to calculate the number, you throw away the few percent gained.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2024-04-26 03:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found