[Israel.pm] splitting a string

Gaal Yahas gaal at forum2.org
Tue Sep 26 00:18:35 PDT 2006


On Tue, Sep 26, 2006 at 08:40:19AM +0300, Levenglick Dov-RM07994 wrote:
> I am looking for the most efficient and most elegant (not necessarily
> the same) way of splitting a string in to chunks of a given length.
> E.g. if I have a string '123456' which I want to split in to two chunks
> of 3 characters, I should have ('123', '456') when done.

1) Are you allowed to destroy the input?

2) If there's a remainder, should it be emitted as the last list item?

The simplest way I know for this is:

  @chunks = $input =~ /(.{1,$chunklen})/g;

This assumes (no, yes) as answers to the above questions. If #2 is "no",

  @chunks = $input =~ /(.{$chunklen})/g;

If you want efficiency you'll have to benchmark, but there's a chance a
loop with substr in it might be faster. That'll be destructive.

You might also change your requirements a little and ask for an iterator
interface: call a piece of code each time you want the next chunk. This
will require copying the whole string once per input string. But it's
not destructive.

-- 
Gaal Yahas <gaal at forum2.org>
http://gaal.livejournal.com/



More information about the Perl mailing list